perm filename TEXC.DOC[206,LMM] blob sn#096402 filedate 1974-04-05 generic text, type T, neo UTF8
␈↓␈↓ εP␈↓ Oi


␈↓␈↓ ∧Q␈↓&T A B L E   O F   C O N T E N T S␈↓'β




␈↓SECTION␈↓ αPAGE




␈↓I␈↓ α8INTRODUCTION TO LISP

␈↓␈↓ βλ1␈↓ ∧(Lists.␈↓ ¬_∀∀∀∀∀∀∀∀∀∀∀∀␈↓ α
␈↓ ? 1

␈↓␈↓ βλ2␈↓ ∧(Atoms.␈↓ ¬_∀∀∀∀∀∀∀∀∀∀∀∀␈↓ α
␈↓ ? 3

␈↓␈↓ βλ3␈↓ ∧(List structures.␈↓ ¬x∀∀∀∀∀∀∀∀∀∀␈↓ α
␈↓ ? 3

␈↓␈↓ βλ4␈↓ ∧(S-expressions.␈↓ ¬x∀∀∀∀∀∀∀∀∀∀␈↓ α
␈↓ ? 4

␈↓␈↓ βλ5␈↓ ∧(The basic functions and predicates of LISP.␈↓ λx∀∀␈↓ α
␈↓ ? 6

␈↓␈↓ βλ6␈↓ ∧(Conditional expressions.␈↓ εX∀∀∀∀∀∀∀∀␈↓ α
␈↓ ? 8

␈↓␈↓ βλ7␈↓ ∧(Boolean expressions.␈↓ ε(∀∀∀∀∀∀∀∀∀␈↓ α
␈↓ ? 9

␈↓␈↓ βλ8␈↓ ∧(Recursive function definitions.␈↓ π8∀∀∀∀∀∀␈↓ α
␈↓ 0 10

␈↓␈↓ βλ9␈↓ ∧(Lambda expressions and functions with functions as
␈↓␈↓ ¬(arguments.␈↓ ε(∀∀∀∀∀∀∀∀∀␈↓ α
␈↓ 0 15

␈↓␈↓ βλ10␈↓ ∧(Label.␈↓ ¬_∀∀∀∀∀∀∀∀∀∀∀∀␈↓ α
␈↓ 0 17


␈↓II␈↓ α8HOW TO WRITE RECURSIVE FUNCTION DEFINITIONS

␈↓␈↓ βλ1␈↓ ∧(Static and dynamic ways of programming.␈↓ λH∀∀∀␈↓ α
␈↓ 0 18

␈↓␈↓ βλ2␈↓ ∧(Simple list recursion.␈↓ ε(∀∀∀∀∀∀∀∀∀␈↓ α
␈↓ 0 19

␈↓␈↓ βλ3␈↓ ∧(Simple S-expression recursion.␈↓ π8∀∀∀∀∀∀␈↓ α
␈↓ 0 21

␈↓␈↓ βλ4␈↓ ∧(Other structural recursions.␈↓ πλ∀∀∀∀∀∀∀␈↓ α
␈↓ 0 22

␈↓␈↓ βλ5␈↓ ∧(Tree search.␈↓ ¬H∀∀∀∀∀∀∀∀∀∀∀␈↓ α
␈↓ 0 23

␈↓␈↓ βλ6␈↓ ∧(Game trees.␈↓ ¬H∀∀∀∀∀∀∀∀∀∀∀␈↓ α
␈↓ 0 27
␈↓␈↓ εP␈↓ I1


␈↓β␈↓ ¬yCHAPTER I

␈↓β␈↓ ¬∞INTRODUCTION TO LISP






␈↓1.  ␈↓βLists.␈↓


␈↓        Symbolic␈α
information␈α
in␈α∞LISP␈α
is␈α
 expressed␈α
 by␈α∞ S-expressions␈α
and␈α
 these␈α∞ are␈α
 represented
␈↓in␈α∂ the␈α∂ memory␈α∞of␈α∂the␈α∂computer␈α∂by␈α∞list␈α∂structures.␈α∂Before␈α∞giving␈α∂formal␈α∂ definitions,␈α∂ we␈α∞ shall
␈↓give␈α
 some␈α
examples.

␈↓        The␈α
most␈α
common␈α
form␈α
of␈α
S-expression␈α
is␈α
the␈α
 list,␈α
 and␈α
 here␈α
are␈α
some␈α
lists:

␈↓The list
␈↓        ␈↓∧(A B C E)
␈↓∧␈↓has four elements.

␈↓The list
␈↓        ␈↓∧(A B (C D) E)
␈↓∧␈↓has four elements one of which is itself a list.

␈↓The list
␈↓        ␈↓∧(A)
␈↓∧␈↓has one element.

␈↓The list
␈↓        ␈↓∧((A B C D))
␈↓∧␈↓also has one element which itself is a list.

␈↓The list
␈↓        ␈↓∧()
␈↓∧␈↓has no elements; it is also written
␈↓        ␈↓∧NIL.
␈↓∧␈↓The list
␈↓        ␈↓∧(PLUS X Y)
␈↓∧␈↓has three elements and may be used to represent the expression
␈↓        ␈↓αx␈↓↓ + ␈↓αy.

␈↓α␈↓The list
␈↓        ␈↓∧(PLUS (TIMES X Y) X 3)
␈↓∧␈↓has four elements and may be used to represent the expression
␈↓        ␈↓αxy␈↓↓ + ␈↓αx␈↓↓ + ␈↓∧3.
␈↓␈↓ ¬xCHAPTER I␈↓ I2


␈↓∧␈↓The list
␈↓        ␈↓∧(EXIST X (ALL Y (IMPLIES (P X) (P Y))))
␈↓∧␈↓may be used to represent the logical expression
␈↓        ␈↓↓(∃␈↓αx␈↓↓)(∀␈↓αy␈↓↓).␈↓αP␈↓↓(␈↓αx␈↓↓)⊃␈↓αP␈↓↓(␈↓αy␈↓↓).

␈↓↓␈↓The list
␈↓        ␈↓∧(INTEGRAL 0 ∞ (TIMES (EXP (TIMES I X Y)) (F X)) X)
␈↓∧␈↓may be used to represent the expression

␈↓        ␈↓	␈␈↓αe␈↓εixy␈↓αf␈↓↓(␈↓αx␈↓↓)␈↓αdx.

␈↓α␈↓The list
␈↓        ␈↓∧((A B) (B A C D) (C B D E) (D B C E) (E C D F) (F E))

␈↓is␈α
used␈αto␈α
represent␈α
the␈αnetwork␈α
of␈α
Figure␈α1␈α
according␈α
 to␈α a␈α
 scheme␈α
whereby␈α there␈α
 is␈α
a␈αsublist
␈↓for␈α
each␈α
vertex␈α
consisting␈α
of␈α
the␈α
vertex␈α
itself␈α
followed␈α
by␈α
the␈α
vertices␈α
to␈α
which␈α
it␈α
is␈α
connected.











␈↓                              Figure␈α
1

␈↓        The␈α∞ elements␈α∂ of␈α∞ a␈α∂ list␈α∞ are␈α∂surrounded␈α∞by␈α∞parentheses␈α∂and␈α∞separated␈α∂by␈α∞spaces.␈α∂ A␈α∞list
␈↓may␈αhave␈αany␈αnumber␈αof␈αterms␈αand␈αany␈α of␈αthese␈α terms␈α may␈α themselves␈α be␈α lists.␈α  In␈α this␈αcase,
␈↓the␈αspaces␈αsurrounding␈αa␈α
sublist␈α may␈α be␈α omitted,␈α and␈α
 extra␈α spaces␈α between␈αelements␈αof␈α
a␈αlist
␈↓are␈α
allowed.␈α
 Thus␈α
the␈α
lists

␈↓        ␈↓∧(A␈αB(C␈α D)␈α   E)

␈↓∧␈↓and

␈↓        ␈↓∧(A␈αB␈α(C␈αD)␈αE)

␈↓∧␈↓are␈α
regarded␈α
as␈α
the␈α
same.
␈↓␈↓ ¬xCHAPTER I␈↓ I3


␈↓2.  ␈↓βAtoms.␈↓


␈↓        The␈αexpressions␈α␈↓∧A,␈αB,␈αX,␈αY,␈α3,␈αPLUS,␈α␈↓and␈α␈↓∧ALL␈↓␈αoccurring␈αin␈αthe␈αabove␈α lists␈αare␈αcalled␈αatoms.
␈↓In␈α
general,␈α∞an␈α
atom␈α
is␈α∞expressed␈α
by␈α
a␈α∞sequence␈α
of␈α
capital␈α∞letters,␈α
 digits,␈α
 and␈α∞ special␈α
 characters
␈↓with␈α∩certain␈α∪ exclusions.␈α∩  The␈α∪exclusions␈α∩are␈α∩<space>,␈α∪<carriage␈α∩return>,␈α∪and␈α∩the␈α∪other␈α∩non-
␈↓printing␈α
 characters,␈α
 and␈α
 also␈α
 the␈α
 parentheses,␈α
brackets,␈α
 semi-colon,␈α
 and␈α
 comma.␈α
  Numbers␈α
are
␈↓expressed␈α∃as␈α∃signed␈α∃decimal␈α∀or␈α∃octal␈α∃numbers,␈α∃ the␈α∀ exact␈α∃ convention␈α∃ depending␈α∃ on␈α∀ the
␈↓implementation.␈α~ Floating␈α~ point␈α~ numbers␈α~ are␈α~ written␈α~ with␈α~decimal␈α~points␈α~and,␈α~when
␈↓appropriate,␈α∪an␈α∪exponent␈α∪notation␈α∪depending␈α∪ on␈α∪ the␈α∪implementation.␈α∪  The␈α∪ reader␈α∩ should
␈↓consult␈α
the␈α
programmer's␈α
manual␈α
for␈α
the␈α
LISP␈α
implementation␈α
he␈α
intends␈α
to␈α
use.

␈↓        Some␈α
examples␈α
of␈α
atoms␈α
are

␈↓        ␈↓∧THE-LAST-TRUMP
␈↓∧␈↓        ␈↓∧A307B
␈↓∧␈↓        ␈↓∧345
␈↓∧␈↓        ␈↓∧3.14159,

␈↓∧␈↓and␈α
from␈α
these␈α
we␈α
can␈α
form␈α
lists␈α
like

␈↓        ((345␈α
3.14159␈α
-47)␈α
A307B␈α
THE-LAST-TRUMP␈α
-45.21).␈α
 



␈↓3.  ␈↓βList␈α
structures.␈↓


␈↓        Lists␈α
 are␈α
 represented␈α
in␈α
the␈αmemory␈α
of␈α
the␈α
computer␈α
by␈αlist␈α
structures.␈α
   A␈α
list␈α
structure␈αis␈α
a
␈↓collection␈αof␈αmemory␈αwords␈α each␈αof␈α which␈α is␈α divided␈α into␈α two␈α parts,␈αand␈αeach␈αpart␈αis␈αcapable
␈↓of␈αcontaining␈αan␈αaddress␈αin␈αmemory.␈αThe␈αtwo␈αparts␈αare␈αcalled␈αare␈α called␈αthe␈α a-part␈α and␈α the␈α d-
␈↓part.␈α⊂ There␈α⊃ is␈α⊂ one␈α⊃computer␈α⊂word␈α⊃for␈α⊂each␈α⊃element␈α⊂of␈α⊃the␈α⊂list,␈α⊃and␈α⊂the␈α⊃a-part␈α⊂of␈α⊃the␈α⊂word
␈↓contains␈α⊂the␈α⊂ address␈α⊂of␈α⊂the␈α⊂list␈α⊂or␈α∂atom␈α⊂representing␈α⊂the␈α⊂element,␈α⊂and␈α⊂the␈α⊂d-part␈α⊂contains␈α∂the
␈↓address␈α
of␈α
the␈α
word␈α
representing␈α
the␈α
next␈α
element␈α
 of␈α
 the␈α
 list.␈α
 If␈α
the␈α
list␈α
element␈α
is␈α
itself␈α
a␈α
list,
␈↓then,␈α
of␈α
course,␈α
the␈α
address␈α
of␈αthe␈α
first␈α
word␈α
of␈α
its␈α
list␈α
structure␈αis␈α
given␈α
in␈α
the␈α
 a-part␈α
 of␈α the␈α
word
␈↓representing␈α
 that␈α element.␈α
 A␈α
diagram␈αshows␈α
this␈α
more␈αclearly␈α
than␈α
words,␈αand␈α
the␈α
list␈αstructure
␈↓corresponding␈αto␈αthe␈α list␈α  ␈↓∧(PLUS␈α(TIMES␈α X␈α Y)␈α X␈α 3)␈↓␈α  which␈αmay␈αrepresent␈αthe␈αexpression␈α ␈↓αxy␈↓↓␈α
+
␈↓↓␈↓αx␈↓↓␈α+␈α␈↓∧3␈α is␈αshown␈αin␈αfigure␈α2.
␈↓␈↓ ¬xCHAPTER I␈↓ I4














␈↓∧                              Figure␈α2.

␈↓∧␈↓        ␈↓∧Atoms␈α⊗ are␈α↔ represented␈α⊗ by␈α↔ the␈α⊗ addresses␈α⊗of␈α↔their␈α⊗property␈α↔lists␈α⊗which␈α↔are␈α⊗list
␈↓∧structures␈αof␈αa␈αspecial␈αkind␈α depending␈α on␈α the␈αimplementation.␈α  (In␈α some␈α implementations,␈α the
␈↓∧first␈α∪ word␈α∪ of␈α∪a␈α∪property␈α∪list␈α∪is␈α∪in␈α∪a␈α∪special␈α∪are␈α∪of␈α∪memory,␈α∪in␈α∪others␈α∪the␈α∪first␈α∀word␈α∪is
␈↓∧distinguished␈α∂ by␈α∞ sign,␈α∂in␈α∞still␈α∂others␈α∞it␈α∂has␈α∂a␈α∞special␈α∂a-part.␈α∞ For␈α∂basic␈α∞LISP␈α∂programming,␈α∂it␈α∞is
␈↓∧enough␈α
 to␈α
 know␈α
 that␈α∞ atoms␈α
 are␈α
distinguishable␈α
 from␈α∞ other␈α
 list␈α
 structures␈α
 by␈α∞a␈α
predicate
␈↓∧called␈α␈↓βat␈↓.)

␈↓        The␈α
 last␈α
 word␈α of␈α
 a␈α
list␈α
cannot␈αhave␈α
the␈α
address␈αof␈α
a␈α
next␈α
word␈αin␈α
its␈α
d-part␈α
since␈αthere
␈↓isn't␈α
any␈α
next␈α
word,␈α
 so␈α
 it␈α
 has␈α
 the␈α
address␈α
of␈α
a␈α
special␈α
atom␈α
called␈α
 ␈↓∧NIL␈↓.

␈↓        A␈α∪ list␈α∪ is␈α∀ referred␈α∪ to␈α∪ by␈α∪giving␈α∀the␈α∪address␈α∪of␈α∪its␈α∀first␈α∪element.␈α∪ According␈α∀to␈α∪this
␈↓convention,␈α⊂we␈α∂see␈α⊂that␈α∂the␈α⊂a-part␈α∂ of␈α⊂ a␈α⊂list␈α∂ word␈α⊂ is␈α∂ the␈α⊂ list␈α∂ element␈α⊂ and␈α∂ the␈α⊂d-part␈α⊂is␈α∂a
␈↓pointer␈αto␈αa␈αsublist␈αformed␈αby␈αdeleting␈αthe␈αfirst␈αelement.␈α Thus␈αthe␈αfirst␈αword␈αof␈αthe␈α list␈α structure
␈↓of␈α figure␈α 2␈α contains␈α a␈α pointer␈αto␈αthe␈αlist␈αstructure␈αrepresenting␈αthe␈αatom␈α ␈↓∧PLUS␈↓,␈αwhile␈αits␈αd-part
␈↓points␈α∂to␈α∂the␈α∞list␈α∂ ␈↓∧((TIMES␈α∂X␈α∞Y)␈α∂X␈α∂3)␈↓.␈α∞ The␈α∂second␈α∂word␈α∞contains␈α∂the␈α∂list␈α∂structure␈α∞representing
␈↓␈↓∧(TIMES␈α∞X␈α
Y)␈↓␈α∞ in␈α∞ its␈α
 a-part␈α∞ and␈α∞ the␈α
 list␈α∞ structure␈α∞representing␈α
 ␈↓∧(X␈α∞3)␈↓␈α∞ in␈α
its␈α∞d-part.␈α∞ The␈α
last
␈↓word␈αpoints␈αto␈αthe␈αatom␈α␈↓∧3␈↓␈α in␈αits␈αa-part␈αand␈αhas␈αa␈αpointer␈αto␈αthe␈αatom␈α ␈↓∧NIL␈↓␈α in␈αits␈α d-part.␈α This␈αis
␈↓consistent␈α
with␈α
the␈α
convention␈α
that␈α
 ␈↓∧NIL␈↓␈α
 represents␈α
the␈α
null␈α
list.



␈↓4.  ␈↓βS-expressions.␈↓


␈↓        When␈α∂we␈α∂examine␈α⊂the␈α∂way␈α∂list␈α⊂structures␈α∂ represent␈α∂ lists␈α⊂ we␈α∂see␈α∂ a␈α⊂ curious␈α∂ asymmetry.
␈↓Namely,␈α the␈α a-part␈αof␈αa␈αlist␈αword␈αcan␈αcontain␈αan␈αatom␈αor␈αa␈αlist,␈αbut␈αthe␈αd-part␈αcan␈αcontain␈αonly␈αa
␈↓list␈α∂ or␈α∂the␈α∞special␈α∂atom␈α∂ ␈↓∧NIL␈↓.␈α∂  This␈α∞restriction␈α∂is␈α∂quite␈α∂unnatural␈α∞from␈α∂the␈α∂computing␈α∂point␈α∞of
␈↓view,␈α and␈α
 we␈α shall␈α allow␈α
 arbitrary␈α atoms␈α to␈α
inhabit␈α the␈α
 d-parts␈α of␈α words,␈α
but␈αthen␈αwe␈α
must
␈↓generalize␈αthe␈αway␈αlist␈αstructures␈αare␈αexpressed␈αas␈αcharacter␈αstrings.␈αTo␈α do␈α this,␈α we␈αintroduce␈αthe
␈↓notion␈α
of␈α
S-expression.

␈↓        An␈α∀ S-expression␈α∪is␈α∀either␈α∪an␈α∀atom␈α∀or␈α∪a␈α∀pair␈α∪of␈α∀S-expressions␈α∪separated␈α∀by␈α∀" . "␈α∪and
␈↓surrounded␈α
by␈α
parentheses.␈α
  In␈α
 BNF,␈α
 we␈α
 can␈α
write
␈↓␈↓ ¬xCHAPTER I␈↓ I5


␈↓<S-expression>␈α
::=␈α
<atom>␈α
|␈α
(<S-expression>␈α
.␈α
<S-expression>).

␈↓Examples␈α
of␈α
S-expressions␈α
are

␈↓        ␈↓∧A
␈↓∧␈↓        ␈↓∧(A . B)
␈↓∧␈↓        ␈↓∧(A . (B . A))
␈↓∧␈↓        ␈↓∧(PLUS (X . (Y . NIL)))
␈↓∧␈↓        ␈↓∧(3 . 3.4)

␈↓∧␈↓        ␈↓∧In␈α
the␈α
memory␈αof␈α
a␈α
computer,␈αan␈α
S-expression␈α
 is␈α represented␈α
by␈α
 the␈α address␈α
of␈α
a␈αword
␈↓∧whose␈αa-part␈αcontains␈αthe␈αfirst␈αelement␈αof␈αthe␈αpair␈αand␈αwhose␈αd-part␈αcontains␈αthe␈αsecond␈αelement
␈↓∧of␈α the␈α pair.␈α
 Thus,␈α the␈αS-expressions␈α (A.B),␈α
 (A.(B.A))␈↓,␈αand␈α ␈↓∧(PLUS.(X.(Y.NIL)))␈α␈↓␈α
are␈αrepresented
␈↓by␈α
the␈α
list␈α
structures␈α
of␈α
figure␈α
3.
















␈↓                              Figure␈α
3.

␈↓        Note␈αthat␈αthe␈αlist␈α␈↓∧(PLUS␈αX␈αY)␈↓␈αand␈αthe␈αS-expression␈α␈↓∧␈α(PLUS␈α.␈α(X␈α.␈α(Y␈α.␈αNIL)))␈↓␈α are␈αrepresented
␈↓in␈α memory␈α by␈α the␈α same␈α list␈αstructure.␈α The␈αsimplest␈αway␈αto␈αtreat␈αthis␈αis␈αto␈αregard␈αS-expressions
␈↓as␈α
primary␈α
and␈α
lists␈α∞ as␈α
 abbreviations␈α
 for␈α
 certain␈α∞ S-expressions,␈α
namely␈α
those␈α
that␈α∞never␈α
have
␈↓any␈αatom␈αbut␈α NIL␈α
 as␈αthe␈αsecond␈αpart␈αof␈α
a␈αpair.␈αIn␈αgiving␈α input␈α
 to␈α LISP,␈α either␈α the␈α list␈α
 form
␈↓or␈α
 the␈αS-expression␈α
 form␈α
may␈αbe␈α
used␈αfor␈α
lists.␈α
 On␈αoutput,␈α
LISP␈αwill␈α
print␈α
a␈αlist␈α
structure␈α
as␈αa
␈↓list␈α as␈α far␈α as␈α it␈α can,␈α otherwise␈α as␈α an␈αS-expression.␈α Thus,␈α some␈αlist␈αstructures␈αwill␈αbe␈αprinted
␈↓in␈αa␈α
mixed␈αnotation,␈α
e.g.␈α␈↓∧((A␈α
.␈αB)␈α
(C␈α.␈αD)␈α
(3))␈↓.

␈↓        In␈αgeneral,␈αthe␈α
list␈α␈↓↓(␈↓αa␈αb␈α
.␈α.␈α.␈α
 z␈↓↓)␈↓␈αmay␈αbe␈α
regarded␈αas␈αan␈α
abbreviation␈αof␈αthe␈α
S-expression␈α␈↓↓(␈↓αa␈↓↓␈α.␈α
(␈↓αb␈↓↓
␈↓↓.␈α(␈↓αc␈↓↓␈α.␈α
(...␈α(␈↓αz␈α.␈α␈↓∧NIL␈↓↓)␈α
...)))␈↓.



␈↓                                      Exercises
␈↓␈↓ ¬xCHAPTER I␈↓ I6


␈↓        1.␈α
If␈αwe␈α
represent␈α
sums␈αand␈α
products␈α
as␈αindicated␈α
 above␈α
 and␈αuse␈α
 ␈↓∧(MINUS␈αX),␈α
 (QUOTIENT
␈↓∧X␈α
Y)␈↓,␈α
and␈α
 ␈↓∧(POWER␈αX␈α
Y)␈↓␈α
 as␈α
representations␈α
of␈α ␈↓↓-␈↓αx␈↓,␈α
 ␈↓αx␈↓↓/␈↓αy␈↓,␈α
and␈α
 ␈↓αx␈↓↓↑␈↓αy␈↓␈α respectively,␈α
then

␈↓        a.␈α
What␈α
do␈α
the␈α
lists

␈↓        ␈↓∧(QUOTIENT␈α2␈α(POWER␈α(PLUS␈αX␈α(MINUS␈αY))␈α3))

␈↓∧␈↓and

␈↓        ␈↓∧(PLUS␈α-2␈α(MINUS␈α2)␈α(TIMES␈αX␈α(POWER␈αY␈α3.3)))

␈↓∧␈↓represent?

␈↓        b.␈α≥   How␈α≤   are␈α≥   the␈α≤  expressions␈α≥  ␈↓αxyz␈↓↓+␈↓∧3␈↓↓(␈↓αu␈↓↓+␈↓αv␈↓↓)↑(-␈↓∧3␈↓↓)␈↓␈α≤  and␈α≥␈↓↓(␈↓αxy␈↓↓-␈↓αyx␈↓↓)/(␈↓αxy␈↓↓+␈↓αyx␈↓↓)␈↓␈α≥to␈α≤be
␈↓represented?

␈↓        2.␈α
In␈α
the␈α
above␈α
 mentioned␈α
 graph␈α
 notation,␈α
 what␈α
 graph␈α
 is␈α
represented␈α
by␈α
the␈α
list

␈↓        ␈↓∧((A␈αD␈αE␈αF)(B␈αD␈αE␈αF)(C␈αD␈αE␈αF)(D␈αA␈αB␈αC)(E␈αA␈αB␈αC)(F␈αA␈αB␈αC))?

␈↓∧␈↓        ␈↓∧␈↓3.␈αWrite␈αthe␈αlist␈α␈↓∧((PLUS␈α(TIMES␈αX␈αY)␈αX␈α3)␈↓␈αas␈αan␈αS-expression.␈α This␈αis␈αsometimes␈αreferred␈αto
␈↓as␈α
"dot-notation".

␈↓        4.␈α
 Write␈α
 the␈α
 following␈α
 S-expressions␈α
 in␈α
list␈α
notation␈α
to␈α
whatever␈α
extent␈α
is␈α
possible:
␈↓        a. (A . NIL)
␈↓        b. (A . B)
␈↓        c. ((A . NIL) . B)
␈↓        d. ((A . B) . ((C . D) . NIL).



␈↓5.  ␈↓βThe␈α
basic␈α
functions␈α
and␈α
predicates␈α
of␈α
LISP.␈↓


␈↓        Just␈α∂as␈α∂numerical␈α∂computer␈α∂programs␈α⊂are␈α∂ based␈α∂ on␈α∂ the␈α∂ four␈α∂arithmetic␈α⊂ operations␈α∂ of
␈↓addition␈α⊂subtraction,␈α⊃multiplication,␈α⊂and␈α⊃division,␈α⊂and␈α⊃the␈α⊂arthmetic␈α⊃predicates␈α⊂of␈α⊃equality␈α⊂and
␈↓comparison,␈α⊂so␈α⊂symbolic␈α⊂ computation␈α⊂ has␈α⊂ its␈α⊂basic␈α⊂predicates␈α⊂and␈α⊂functions.␈α⊂ LISP␈α⊃has␈α⊂three
␈↓basic␈α
functions␈α
and␈α
two␈α
predicates.

␈↓        First,␈α we␈αhave␈αtwo␈αfunctions␈α␈↓βa␈↓␈αand␈α␈↓βd␈↓.␈α ␈↓βa␈α␈↓αx␈↓␈αis␈αthe␈αa-part␈αof␈αthe␈αS-expression␈α␈↓∧x␈↓.␈α Thus,␈α ␈↓βa␈↓∧(A␈α.
␈↓∧B)␈α␈↓↓=␈α␈↓∧A␈↓,␈αand␈α␈↓βa␈↓∧((A␈α.␈αB)␈α.␈αA)␈α␈↓↓=␈α␈↓∧(A␈α.␈αB)␈↓.␈α␈↓βd␈α␈↓αx␈↓␈αis␈αthe␈αd-part␈αof␈αthe␈αS-expression␈α␈↓αx␈↓.␈αThus␈α␈↓βd␈↓∧(A␈α.␈αB)␈α␈↓↓=␈α␈↓∧B␈↓,␈αand
␈↓␈↓βd␈↓∧((A␈α
.␈α
B)␈α.␈α
A)␈α
␈↓↓=␈α␈↓∧A␈↓.␈α
 ␈↓βa␈α
␈↓αx␈↓␈αand␈α
␈↓βd␈α
␈↓αx␈↓␈αare␈α
undefined␈α
in␈αbasic␈α
LISP␈α
when␈α␈↓αx␈↓␈α
is␈α
an␈αatom,␈α
but␈α
they␈αmay␈α
have
␈↓a␈α
meaning␈α
in␈α
some␈α
implementations.

␈↓        Since␈α
 lists␈α
 are␈α a␈α
 particular␈α
 kind␈α
 of␈α S-expression,␈α
the␈α
meanings␈α
of␈α ␈↓βa␈↓␈α
 and␈α
 ␈↓βd␈↓␈α
 for␈αlists␈α
are
␈↓also␈α
determined␈α
 by␈α
 the␈α
 above␈α
definitions.␈α
 Thus,␈α
we␈α
have

␈↓        ␈↓βa␈↓∧(A␈αB␈αC␈αD)␈α␈↓↓=␈↓β␈α
A
␈↓␈↓ ¬xCHAPTER I␈↓ I7


␈↓β␈↓and

␈↓        ␈↓βd␈↓∧(A␈αB␈αC␈αD)␈α␈↓↓=␈α␈↓∧(B␈αC␈αD),

␈↓∧␈↓and␈αwe␈αsee␈αthat,␈αin␈αgeneral,␈α ␈↓βa␈α␈↓αx␈↓␈α is␈αthe␈αfirst␈αelement␈αof␈α the␈α list␈α ␈↓αx␈↓,␈αand␈α ␈↓βd␈α␈↓αx␈↓␈α is␈αthe␈αrest␈αof␈αthe␈αlist,
␈↓deleting␈α
that␈α
first␈α
element.

␈↓        Notice␈α
 that␈α∞ for␈α
S-expressions,␈α
the␈α∞definitions␈α
of␈α
 ␈↓βa␈α∞␈↓αx␈↓␈α
 and␈α
␈↓βd␈α∞␈↓αx␈↓␈α
 are␈α
symmetrical,␈α∞while␈α
for
␈↓lists␈α∞the␈α∞symmetry␈α∞is␈α∞lost.␈α
 This␈α∞is␈α∞because␈α∞ of␈α∞ the␈α
 unsymmetrical␈α∞nature␈α∞of␈α∞the␈α∞convention␈α
that
␈↓defines␈α
lists␈α
in␈α
terms␈α
of␈α
S-expressions.

␈↓        Notice,␈α
further,␈α
 our␈α
 convention␈α
 of␈α∞ writing␈α
  ␈↓βa␈↓␈α
  and␈α
  ␈↓βd␈↓  ␈α
without␈α∞ brackets␈α
 surrounding
␈↓the␈α
argument.␈α Also,␈α
we␈αuse␈α
lower␈αcase␈α
letters␈αfor␈α
our␈αfunction␈α
names␈αand␈α
for␈α
variables,␈αreserving
␈↓the␈α
upper␈α
case␈α
letters␈α
for␈α
the␈α
S-expressions␈α
themselves.

␈↓        The␈α third␈α function␈α ␈↓αcons␈↓↓[␈↓αx␈↓↓,␈α␈↓αy␈↓↓]␈↓␈α forms␈αthe␈αS-expression␈αwhose␈αa-part␈αand␈αd-part␈αare␈α ␈↓αx␈↓␈α and
␈↓␈↓αy␈↓␈α
 respectively.␈α
 Thus

␈↓        ␈↓αcons␈↓↓[␈↓∧(A.B),␈αA␈↓↓]␈α=␈α␈↓∧((A.B).A).

␈↓∧␈↓        ␈↓∧␈↓We␈α⊂ see␈α⊂ that␈α⊂ for␈α⊂ lists,␈α⊂  ␈↓αcons␈↓␈α⊂  is␈α⊂a␈α⊂prefixing␈α⊂operation.␈α⊂ Namely,␈α⊂ ␈↓αcons␈↓↓[␈↓αx␈↓↓,␈α⊂␈↓αy␈↓↓]␈↓␈α⊂ is␈α⊃the␈α⊂list
␈↓obtained␈α
by␈α
putting␈α
the␈α
 element␈α
  ␈↓αx␈↓  ␈α
onto␈α
the␈α
front␈α
of␈α
the␈α
list␈α
 ␈↓αy␈↓.␈α
 Thus

␈↓        ␈↓αcons␈↓↓[␈↓∧A,␈α(B␈αC␈αD␈αE)␈↓↓]␈α=␈α␈↓∧(A␈αB␈αC␈αD␈αE).

␈↓∧␈↓If␈αwe␈αwant␈α ␈↓αcons␈↓↓[␈↓αx␈↓↓,␈α␈↓αy␈↓↓]␈↓␈α to␈α be␈α a␈α list,␈α then␈α  ␈↓αy␈↓␈α  must␈α be␈α a␈α list␈α(possibly␈αthe␈αnull␈αlist␈α ␈↓∧NIL␈↓),␈αand␈α ␈↓αx␈↓
␈↓must␈α
be␈α
a␈α
list␈α
or␈α
an␈α
atom.␈α
 In␈α
the␈α
case␈α
of␈α
S-expressions␈α
in␈α
general,␈α
there␈α
is␈α
no␈α
restriction␈α
on␈α the
␈↓arguments␈α
 of␈α
  ␈↓αcons␈↓.␈α
  Usually,␈α
 we␈α
 shall␈α
 write␈α
  ␈↓αx␈α
.␈α
y␈↓␈α
  instead␈α
of␈α
␈↓αcons␈↓↓[␈↓αx␈↓↓,␈α
␈↓αy␈↓↓]␈↓␈α
 since␈α
this␈αis␈α
briefer.

␈↓        The␈α
 first␈α
 predicate␈α
 is␈α  ␈↓βat␈α
␈↓αx␈↓.␈α
  ␈↓βat␈α
␈↓αx␈↓␈α  is␈α
 true␈α
 if␈α
  the␈αS-expression␈α
 ␈↓αx␈↓␈α
 is␈α
atomic␈α
and␈αfalse
␈↓otherwise.

␈↓        The␈α∀ second␈α∀ predicate␈α∀ is␈α∃equality␈α∀of␈α∀atomic␈α∀symbols␈α∀written␈α∃␈↓αx␈α∀␈↓βeq␈α∀␈↓αy␈↓.␈α∀Equality␈α∃of␈α∀S-
␈↓expressions␈α∂is␈α∞tested␈α∂by␈α∂a␈α∞ program␈α∂ based␈α∂ on␈α∞␈↓βeq␈↓.␈α∂  Actually␈α∞  ␈↓βeq␈↓␈α∂ does␈α∂a␈α∞bit␈α∂more␈α∂than␈α∞testing
␈↓equality␈αof␈α
atoms.␈α Namely,␈α ␈↓αx␈α
␈↓βeq␈α␈↓αy␈↓␈α
 is␈αtrue␈αif␈α
and␈αonly␈α
if␈αthe␈αaddresses␈α
 of␈α the␈α
 first␈αwords␈α of␈α
 the
␈↓S-expressions␈α  ␈↓αx␈↓␈α  and␈α ␈↓αy␈↓␈α are␈αequal.␈α Therefore,␈αif␈α␈↓αx␈α␈↓βeq␈α␈↓αy␈↓,␈αthen␈α ␈↓αx␈↓␈α and␈α␈↓αy␈↓␈αare␈αcertainly␈α the␈α same
␈↓S-expression␈α since␈αthey␈α are␈α represented␈αby␈α
the␈αsame␈αstructure␈αin␈αmemory.␈α The␈αconverse␈α
is␈αfalse
␈↓because␈αthere␈αis␈αno␈α guarantee␈α in␈α general␈α that␈α the␈α same␈αS-expression␈αis␈αnot␈αrepresented␈αby␈αtwo
␈↓different␈αlist␈αstructures.␈α In␈αthe␈αparticular␈αcase␈αwhere␈αat␈αleast␈αone␈αof␈αthe␈αS-expressions␈αis␈α known␈αto
␈↓be␈α
 an␈α
atom,␈α
this␈α
guarantee␈α
can␈α
be␈α
given,␈α
because␈α
LISP␈α
represents␈α
atoms␈α
uniquely␈α
in␈α
memory.

␈↓        The␈αabove␈αare␈αall␈α
the␈αbasic␈αfunctions␈αof␈α
LISP;␈αall␈αother␈αLISP␈α
functions␈α can␈α be␈α built␈α
 from
␈↓them␈α∞ using␈α∞ recursive␈α
 conditional␈α∞expressions␈α∞as␈α
will␈α∞shortly␈α∞be␈α
explained.␈α∞However,␈α∞the␈α∞use␈α
of
␈↓certain␈α
abbreviations␈α
makes␈α
LISP␈α
programs␈α
easier␈α
to␈α
write␈α
and␈α
understand.

␈↓        ␈↓βn␈α
␈↓αx␈↓␈α
  is␈α an␈α
 abbreviation␈α
for␈α ␈↓αx␈α
␈↓βeq␈α
␈↓∧NIL␈↓.␈α
 It␈αrates␈α
a␈α
special␈αnotation␈α
because␈α
 ␈↓∧NIL␈↓␈α
 plays␈αthe
␈↓same␈α∞ role␈α∞ among␈α∂ lists␈α∞ that␈α∞ zero␈α∞plays␈α∂ among␈α∞ numbers,␈α∞ and␈α∞list␈α∂variables␈α∞often␈α∞have␈α∂to␈α∞be
␈↓tested␈α
to␈α
see␈α
if␈α
their␈α
value␈α
is␈α
 ␈↓∧NIL␈↓.
␈↓␈↓ ¬xCHAPTER I␈↓ I8


␈↓        The␈αnotation␈α  ␈↓αlist␈↓↓[␈↓αx1,␈α
x2,␈α.␈α.␈α.␈α
,␈αxn␈↓↓]␈↓␈α  is␈α
 used␈α to␈α denote␈α the␈α
composition␈αof␈α␈↓αcons␈↓'s␈αthat␈α
forms
␈↓a␈α
list␈α
from␈α
its␈α
elements.␈α
 Thus

␈↓        ␈↓αlist␈↓↓[␈↓αx,␈α
y,␈α
z␈↓↓]␈α=␈α
␈↓αcons␈↓↓[␈↓αx,␈α
cons␈↓↓[␈↓αy,␈αcons␈↓↓[␈↓αz,␈α
␈↓∧NIL␈↓↓]]]

␈↓↓␈↓and␈αforms␈αa␈αlist␈αof␈αthree␈αelements␈αout␈αof␈αthe␈αquantities␈α ␈↓αx,␈α y,␈α␈↓␈α and␈α␈↓αz␈↓.␈α We␈α often␈α write␈α ␈↓↓<␈↓αx␈αy␈α.␈α.␈α.
␈↓αz␈↓↓>␈↓␈α
 instead␈α
of␈α
 ␈↓αlist␈↓↓[␈↓αx,␈α
y,␈α
.␈α
.␈α
.␈α
,␈α
z␈↓↓]␈↓␈α
when␈α
this␈α
will␈α
not␈α
cause␈α
 confusion.

␈↓        Compositions␈αof␈α ␈↓βa␈↓␈α and␈α ␈↓βd␈↓␈α are␈αwritten␈αby␈αconcatenating␈α the␈αletters␈α  ␈↓βa␈↓␈α and␈α ␈↓βd␈↓.␈α Thus,␈αit␈αis
␈↓easily␈α∂seen␈α∂that␈α∂ ␈↓βad␈α∂␈↓αx␈↓␈α⊂ denotes␈α∂the␈α∂second␈α∂element␈α∂of␈α∂the␈α⊂list␈α∂ ␈↓αx␈↓,␈α∂and␈α∂ ␈↓βadd␈α∂␈↓αx␈↓␈α∂ denotes␈α⊂the␈α∂third
␈↓element␈α
of␈α
that␈α
list.



␈↓6.  ␈↓βConditional␈α
expressions.␈↓


␈↓        When␈αthe␈αform␈αthat␈αrepresents␈αa␈αfunction␈αdepends␈αon␈αwhether␈αa␈αcertain␈α predicate␈αis␈αtrue␈αof
␈↓the␈α
arguments,␈α
conditional␈α
expressions.␈α
 are␈α
used.␈α
 The␈α
conditional␈α
expression

␈↓        ␈↓βif␈α
␈↓αp␈α
␈↓βthen␈α
␈↓αa␈α
␈↓βelse␈α
␈↓αb

␈↓α␈↓is␈α∞evaluated␈α
as␈α∞follows:␈α
 First␈α∞ ␈↓αp␈↓␈α
 is␈α∞evaluated␈α∞and␈α
determined␈α∞to␈α
be␈α∞true␈α
or␈α∞false.␈α
 If␈α∞ ␈↓αp␈↓␈α∞ is␈α
true,
␈↓then␈α ␈↓αa␈↓␈α is␈αevaluated␈αand␈α its␈α value␈αis␈α the␈α value␈α of␈α the␈α expression.␈α  If␈α  ␈↓αp␈↓␈α  is␈αfalse,␈αthen␈α ␈↓αb␈↓␈α is
␈↓evaluated␈α∩and␈α⊃its␈α∩value␈α⊃is␈α∩the␈α⊃value␈α∩of␈α∩the␈α⊃expression.␈α∩ Note␈α⊃that␈α∩if␈α⊃␈↓αp␈↓␈α∩ is␈α⊃true,␈α∩ ␈↓αb␈↓␈α∩ is␈α⊃never
␈↓evaluated,␈αand␈α
if␈α ␈↓αp␈↓␈α
 is␈αfalse,␈α
then␈α ␈↓αa␈↓␈α
 is␈αnever␈α
evaluated.␈α The␈α
importance␈αof␈α
this␈αwill␈αbe␈α
explained
␈↓later.␈α∞ A␈α∂familiar␈α∞ function␈α∞that␈α∂can␈α∞be␈α∂written␈α∞conveniently␈α∞using␈α∂conditional␈α∞expressions␈α∂is␈α∞the
␈↓absolute␈α
value␈α
of␈α
a␈α
real␈α
number.␈α
 We␈α
have

␈↓        ␈↓↓|␈↓αx␈↓↓|␈α
=␈α␈↓βif␈α
␈↓αx␈↓↓<␈↓∧0␈α␈↓βthen␈α
␈↓↓-␈↓αx␈α␈↓βelse␈α
␈↓αx.

␈↓α␈↓A␈α
more␈α
general␈α
form␈α
of␈α
conditional␈α
expression␈α
is

␈↓        ␈↓βif␈α
␈↓αp␈α
␈↓βthen␈α
␈↓αa␈α
␈↓βelse␈α
if␈α
␈↓αq␈α
␈↓βthen␈α
␈↓αb␈α
.␈α
.␈α
.␈α
 ␈↓βelse␈α
if␈α
␈↓αs␈α
␈↓βthen␈α
␈↓αd␈α
␈↓βelse␈α
␈↓αe.

␈↓α␈↓There␈α can␈α be␈α any␈α number␈α of␈α terms;␈α the␈α value␈α is␈αdetermined␈αby␈αevaluating␈αthe␈αpropositional
␈↓terms␈α ␈↓αp,␈α q␈↓,␈αetc.␈αuntil␈αa␈αtrue␈αterm␈α is␈αfound;␈α the␈αvalue␈αis␈αthen␈αthat␈αof␈αthe␈αterm␈αfollowing␈αthe␈αnext
␈↓␈↓βthen␈↓.␈α
 If␈α
none␈α
of␈α
the␈α
propositional␈α
terms␈α
is␈α
true,␈α
then␈α
the␈α
value␈α
is␈α
that␈α
of␈α
the␈α
term␈α∞following␈α
the
␈↓␈↓βelse␈↓.

␈↓        The␈α
function␈α
graphed␈α
in␈α
figure␈α
4␈α
is␈α
described␈α
by␈α
the␈α
equation

␈↓        ␈↓αtri␈↓↓[␈↓αx␈↓↓]␈α
=␈α␈↓βif␈α
␈↓αx␈↓↓<-␈↓∧1␈α
␈↓βthen␈α␈↓∧0␈α
␈↓βelse␈α
if␈α␈↓αx␈↓↓<␈↓∧0␈α
␈↓βthen␈α
␈↓∧1␈↓↓+␈↓αx␈α␈↓βelse␈α
if␈α
␈↓αx␈↓↓<␈↓∧1␈α␈↓βthen␈α
␈↓∧1␈↓↓-␈↓αx␈α␈↓βelse␈α
␈↓∧0.
␈↓␈↓ ¬xCHAPTER I␈↓ I9













␈↓∧␈↓                              Figure␈α
4.



␈↓7.  ␈↓βBoolean␈α
expressions.␈↓


␈↓        In␈α∩ making␈α∩ up␈α∪ the␈α∩ propositional␈α∩  parts␈α∩  of␈α∪  conditional␈α∩expressions,␈α∩  it␈α∪  is␈α∩  often
␈↓necessary␈α∂  to␈α∞  combine␈α∂ elementary␈α∂propositional␈α∞expressions␈α∂using␈α∞the␈α∂Boolean␈α∂operators␈α∞ and,
␈↓or,␈α and␈α
not.␈α  We␈α
 use␈α the␈α symbols␈α
  ␈↓↓∧␈↓,␈α ␈↓↓∨␈↓,␈α
and␈α ␈↓↓¬␈↓␈α respectively,␈α
for␈αthese␈α
operators.␈α In␈αLISP,␈α
the
␈↓atoms␈α∂ ␈↓∧T␈↓␈α∂ and␈α∂ ␈↓∧NIL␈↓␈α∂ are␈α∂used␈α∂for␈α⊂ the␈α∂ truth␈α∂values.␈α∂ The␈α∂Boolean␈α∂operators␈α∂may␈α⊂be␈α∂described
␈↓simply␈α∀by␈α∪listing␈α∀the␈α∀values␈α∪of␈α∀the␈α∀elementary␈α∪Boolean␈α∀expressions␈α∀for␈α∪ each␈α∀ case␈α∀ of␈α∪ the
␈↓arguments.␈α
 Thus␈α
we␈α
have:

␈↓        ␈↓∧T␈↓↓∧␈↓∧T ␈↓↓= ␈↓∧T
␈↓∧␈↓        ␈↓∧T␈↓↓∧␈↓∧F ␈↓↓= ␈↓∧F
␈↓∧␈↓        ␈↓∧F␈↓↓∧␈↓∧T ␈↓↓= ␈↓∧F
␈↓∧␈↓        ␈↓∧F␈↓↓∧␈↓∧F ␈↓↓= ␈↓∧F

␈↓∧␈↓        ␈↓∧T␈↓↓∨␈↓∧T ␈↓↓= ␈↓∧T
␈↓∧␈↓        ␈↓∧T␈↓↓∨␈↓∧F ␈↓↓= ␈↓∧T
␈↓∧␈↓        ␈↓∧F␈↓↓∨␈↓∧T ␈↓↓= ␈↓∧T
␈↓∧␈↓        ␈↓∧F␈↓↓∨␈↓∧F ␈↓↓= ␈↓∧F

␈↓∧␈↓        ␈↓∧␈↓↓¬␈↓∧T ␈↓↓= ␈↓∧F
␈↓∧␈↓        ␈↓∧␈↓↓¬␈↓∧F ␈↓↓= ␈↓∧T.

␈↓∧␈↓        ␈↓∧␈↓The␈α∞ Boolean␈α∂ operators␈α∞ can␈α∞ be␈α∂ described␈α∞ by␈α∞  conditional␈α∂expressions␈α∞in␈α∂the␈α∞following
␈↓way:

␈↓        ␈↓αp␈↓↓∧␈↓αq ␈↓↓= ␈↓βif ␈↓αp ␈↓βthen ␈↓αq ␈↓βelse ␈↓∧F
␈↓∧␈↓        ␈↓∧␈↓αp␈↓↓∨␈↓αq ␈↓↓= ␈↓βif ␈↓αp ␈↓βthen ␈↓∧T ␈↓βelse ␈↓αq
␈↓α␈↓        ␈↓α␈↓↓¬␈↓αp ␈↓↓= ␈↓βif ␈↓αp ␈↓βthen ␈↓∧F ␈↓βelse ␈↓∧T.

␈↓∧␈↓Note␈αthat␈αif␈α ␈↓αp␈↓␈α is␈αfalse␈α ␈↓αp␈↓↓∧␈↓αq␈↓␈α is␈αfalse␈αindependent␈αof␈αthe␈αvalue␈α of␈α␈↓αq␈↓,␈α and␈α likewise␈α if␈α ␈↓αp␈↓␈α is␈αtrue,
␈↓then␈α∞ ␈↓αp␈↓↓∨␈↓αq␈↓␈α∂ is␈α∞true␈α∞independent␈α∂of␈α∞␈↓αq␈↓.␈α∂ If␈α∞ ␈↓αp␈↓␈α∞ has␈α∂been␈α∞evaluated␈α∂and␈α∞found␈α∞to␈α∂be␈α∞false,␈α∂then␈α∞  ␈↓αq␈↓
␈↓␈↓ ¬xCHAPTER I␈↓ :10


␈↓does␈α∂not␈α∂ have␈α⊂ to␈α∂ be␈α∂evaluated␈α⊂at␈α∂all␈α∂to␈α⊂find␈α∂the␈α∂value␈α⊂of␈α∂ ␈↓αp␈↓↓∧␈↓αq␈↓,␈α∂and,␈α⊂in␈α∂fact,␈α∂LISP␈α⊂does␈α∂not
␈↓evaluate␈α
 ␈↓αq␈↓␈α
 in␈αthis␈α
case.␈α
 Similarly,␈α ␈↓αq␈↓␈α
 is␈α
not␈α
evaluated␈α in␈α
 evaluating␈α
  ␈↓αp␈↓↓∨␈↓αq␈↓␈α if␈α
 ␈↓αp␈↓␈α
 is␈α
true.␈αThis
␈↓procedure␈α⊂is␈α⊃in␈α⊂accordance␈α⊃with␈α⊂the␈α⊂above␈α⊃conditional␈α⊂expression␈α⊃descriptions␈α⊂of␈α⊃ the␈α⊂Boolean
␈↓operators.␈α The␈α
importance␈αof␈αthis␈α
convention␈αwhich␈αcontrasts␈α
with␈αthat␈αof␈α
ALGOL␈α 60,␈α
 will␈α be
␈↓apparent␈α
 later␈α
 when␈α
 we␈α
 discuss␈α
recursive␈α
definitions␈α
of␈α
functions␈α
and␈α
predicates.



␈↓8.  ␈↓βRecursive␈α
function␈α
definitions.␈↓


␈↓        In␈α∞such␈α∞languages␈α∞as␈α∞FORTRAN␈α∞and␈α
 Algol,␈α∞ computer␈α∞ progrrams␈α∞are␈α∞ expressed␈α∞ in␈α
the
␈↓main␈αas␈αsequences␈αof␈αassignment␈αstatements␈αand␈αconditional␈αgo␈αto's.␈α In␈αLISP,␈αprograms␈αare␈αmainly
␈↓expressed␈α
 in␈α
 the␈α
form␈α
of␈α
recursively␈α
defined␈α
functions.␈α
 We␈α
begin␈α
with␈α
an␈α
example.

␈↓        The␈α∞ function␈α∞  ␈↓αalt␈↓↓[␈↓αx␈↓↓]␈↓␈α∞  gives␈α∞ a␈α∞ list␈α∂ whose␈α∞ elements␈α∞ are␈α∞alternate␈α∞elements␈α∞of␈α∞the␈α∂list␈α∞ ␈↓αx␈↓
␈↓beginning␈α
with␈α
the␈α
first.␈α
 Thus

␈↓        ␈↓αalt␈↓↓[␈↓∧(A B C D E)␈↓↓] = ␈↓∧(A C E),

␈↓∧␈↓        ␈↓∧␈↓αalt␈↓↓[␈↓∧(((A B) (C D))␈↓↓] = ␈↓∧((A B)),

␈↓∧␈↓        ␈↓∧␈↓αalt␈↓↓[␈↓∧(A)␈↓↓] = ␈↓∧(A),
␈↓∧␈↓and
␈↓        ␈↓αalt␈↓↓[␈↓∧NIL␈↓↓] = ␈↓∧NIL.

␈↓∧␈↓        ␈↓∧The function  ␈↓αalt␈↓  is defined by the equation

␈↓        alt␈↓↓[␈↓αx␈↓↓] ← ␈↓βif n ␈↓αx ␈↓↓∨ ␈↓βn d ␈↓αx ␈↓βthen ␈↓αx ␈↓βelse a ␈↓αx . alt␈↓↓[␈↓βdd ␈↓αx␈↓↓].

␈↓↓␈↓        ␈↓↓␈↓The␈α
 above␈α
 definition␈α is␈α
 best␈α
 explained␈α by␈α
 using␈α
 it␈αto␈α
evaluate␈α
some␈α
expressions.␈α We
␈↓start␈αwith␈α ␈↓αalt␈↓↓[␈↓∧NIL␈↓↓]␈↓.␈αTo␈αevaluate␈αthis␈αexpression␈α we␈α evaluate␈α the␈αexpression␈αto␈αthe␈αright␈αof␈αthe␈α
 ␈↓↓←␈↓
␈↓sign␈α
remembering␈α
that␈α
the␈αvariable␈α
 ␈↓αx␈↓␈α
 has␈α
the␈α
value␈α ␈↓∧NIL␈↓.␈α
 A␈α
 conditional␈α
expression␈α is␈α
 evaluated
␈↓by␈α
first␈α
evaluating␈α
the␈α
first␈α
propositional␈α∞term␈α
¬␈α
in␈α
this␈α
case␈α
 ␈↓βn␈α
␈↓αx␈α∞␈↓↓∨␈α
␈↓βn␈α
d␈α
␈↓αx␈↓.␈α
This␈α
expression␈α∞is␈α
a
␈↓disjunction␈αand␈αin␈α its␈αevaluation␈αwe␈αfirst␈αevaluate␈αthe␈αfirst␈αdisjunct,␈αnamely␈α ␈↓βn ␈↓αx␈↓.␈α Since␈α ␈↓αx␈α␈↓↓=␈α␈↓∧NIL,
␈↓∧␈↓βn␈α␈↓αx␈↓␈α is␈αtrue,␈αthe␈αdisjunction␈αis␈αtrue,␈αand␈αthe␈αvalue␈αof␈α the␈α conditional␈α expression␈α is␈α the␈αvalue␈αof
␈↓the␈α∞term␈α
after␈α∞the␈α
first␈α∞true␈α
propositiional␈α∞term.␈α∞The␈α
term␈α∞is␈α
  ␈↓αx␈↓,␈α∞ and␈α
 its␈α∞ value␈α
 is␈α∞␈↓∧NIL␈↓,␈α∞ so␈α
the
␈↓value␈α
of␈α
 ␈↓αalt␈↓↓[␈↓∧NIL␈↓↓]␈↓␈α∞ is␈α
 ␈↓∧NIL␈↓␈α
 as␈α
stated␈α∞above.␈α
  Obeying␈α
the␈α
rules␈α∞about␈α
the␈α
order␈α
of␈α∞evaluation␈α
of
␈↓terms␈α∞in␈α∂ conditional␈α∞ and␈α∂Boolean␈α∞expressions␈α∂is␈α∞important␈α∂in␈α∞this␈α∂case␈α∞since␈α∂if␈α∞we␈α∂didn't␈α∞obey
␈↓these␈αrules,␈αwe␈αmight␈αfind␈αourselves␈αtrying␈αto␈α evaluate␈α  ␈↓βn␈αd␈α␈↓αx␈↓␈α  or␈α␈↓αalt␈↓↓[␈↓βdd␈α␈↓αx␈↓↓]␈↓,␈αand␈αsince␈α ␈↓αx␈↓␈α
is␈α ␈↓∧NIL␈↓,
␈↓neither␈α∞of␈α∞these␈α∞has␈α∞a␈α∞value.␈α
 An␈α∞attempt␈α∞to␈α∞evaluate␈α∞them␈α∞in␈α
LISP␈α∞would␈α∞give␈α∞rise␈α∞to␈α∞an␈α
error
␈↓return.

␈↓        As␈αa␈α
second␈αexample,␈α
consider␈α  ␈↓αalt␈↓↓[␈↓∧(A␈α
 B)␈↓↓]␈↓.␈α  Since␈α
 neither␈α␈↓βn␈α
␈↓αx␈↓␈αnor␈α
␈↓βn␈αd␈α
␈↓αx␈↓␈αis␈α
true␈αin␈αthis␈α
case,
␈↓the␈αdisjunction␈α␈↓βn␈α␈↓αx␈α␈↓↓∨␈α␈↓βn␈αd␈α␈↓αx␈α␈↓is␈α false␈α and␈α the␈α value␈α of␈α the␈α expression␈α is␈α the␈α  value␈α  of␈α␈↓βa␈α␈↓αx␈α.
␈↓αalt␈↓↓[␈↓βdd␈α␈↓αx␈↓↓].␈α    ␈↓βa␈α␈↓αx␈↓␈αhas␈αthe␈αvalue␈α ␈↓∧A␈↓,␈αand␈α␈↓βdd␈α␈↓αx␈↓␈αhas␈αthe␈αvalue␈α␈↓∧NIL␈↓,␈αso␈αwe␈αmust␈αnow␈αevaluate␈α ␈↓αalt␈↓↓[␈↓∧NIL␈↓↓]␈↓,
␈↓and␈α∞we␈α∞already␈α∞know␈α∞that␈α
the␈α∞value␈α∞  of␈α∞  this␈α∞  expression␈α
 is␈α∞  ␈↓∧NIL␈↓.␈α∞ Therefore,␈α∞ the␈α∞ value␈α
 of
␈↓␈↓αalt␈↓↓[␈↓∧(A␈α
B)␈↓↓]␈↓␈α
 is␈α
that␈α
of␈α
 ␈↓∧A.NIL␈↓␈α
 which␈αis␈α
 ␈↓∧(A)␈↓.
␈↓␈↓ ¬xCHAPTER I␈↓ :11


␈↓        We␈α
can␈α
describe␈α
this␈α
 evaluation␈α
 in␈α
 a␈α
 less␈α
 wordy␈α
 way␈α
 by␈α
writing

␈↓        ␈↓αalt␈↓↓[␈↓∧(A B)␈↓↓] = ␈↓βif n␈↓∧(A B) ␈↓↓∨ ␈↓βn d␈↓∧(A B) ␈↓βthen ␈↓∧(A B) ␈↓βelse
␈↓β                        a␈↓∧(A B).␈↓αalt␈↓↓[␈↓βdd␈↓∧(A B)␈↓↓]

␈↓↓                   = ␈↓βif ␈↓∧NIL ␈↓↓∨ ␈↓βn d␈↓∧(A B) ␈↓βthen ␈↓∧(A B) ␈↓βelse
␈↓β                        a␈↓∧(A B).␈↓αalt␈↓↓[␈↓βdd␈↓∧(A B)␈↓↓]

␈↓↓                   = ␈↓βif ␈↓∧NIL ␈↓βthen ␈↓∧(A B) ␈↓βelse
␈↓β                        a␈↓∧(A B).␈↓αalt␈↓↓[␈↓βdd␈↓∧(A B)␈↓↓]

␈↓↓                   = ␈↓βa␈↓∧(A B).␈↓αalt␈↓↓[␈↓βdd␈↓∧(A B)␈↓↓]

␈↓↓                   = ␈↓∧A.␈↓αalt␈↓↓[␈↓∧NIL␈↓↓]

␈↓↓                   = ␈↓∧A␈↓↓.[␈↓βif n␈↓∧NIL ␈↓↓∨ ␈↓βnd␈↓∧NIL ␈↓βthen ␈↓∧NIL ␈↓βelse
␈↓β                        a␈↓∧NIL.␈↓αalt␈↓↓[␈↓βdd␈↓∧NIL␈↓↓]]

␈↓↓                   = ␈↓∧A␈↓↓.[␈↓βif ␈↓∧T ␈↓↓∨ ␈↓βnd␈↓∧NIL ␈↓βthen ␈↓∧NIL ␈↓βelse
␈↓β                        a␈↓∧NIL.␈↓αalt␈↓↓[␈↓βdd␈↓∧NIL␈↓↓]]

␈↓↓                   = ␈↓∧A␈↓↓.[␈↓βif ␈↓∧T ␈↓βthen ␈↓∧NIL ␈↓βelse
␈↓β                        a␈↓∧NIL.␈↓αalt␈↓↓[␈↓βdd␈↓∧NIL␈↓↓]]

␈↓↓                   = ␈↓∧A␈↓↓.[␈↓∧NIL␈↓↓]

␈↓↓                   = ␈↓∧(A).

␈↓∧␈↓        ␈↓∧␈↓This␈α⊂is␈α⊃still␈α⊂very␈α⊃ long-winded,␈α⊂ and␈α⊃ now␈α⊂ that␈α⊃ the␈α⊂ reader␈α⊃understands␈α⊂ the␈α⊃ order␈α⊂ of
␈↓evaluation␈α
 of␈α
 conditional␈α
 and␈α
Boolean␈α
expressions,␈α
we␈α
can␈α
proceed␈α
more␈α
briefly␈α
to␈α
evaluate

␈↓        ␈↓αalt␈↓↓[␈↓∧(A␈αB␈αC␈αD␈αE)␈↓↓]␈α=␈α␈↓∧A.␈↓αalt␈↓↓[␈↓∧(C␈αD␈αE)␈↓↓]

␈↓↓                        =␈α␈↓∧A␈↓↓.[␈↓∧C.␈↓αalt␈↓↓[␈↓∧(E)␈↓↓]]

␈↓↓                        =␈α␈↓∧A.␈↓↓[␈↓∧C.(E)␈↓↓]

␈↓↓                        =␈α␈↓∧(A␈αC␈αE).

␈↓∧␈↓        ␈↓∧␈↓Here␈α
are␈α
three␈α
more␈α
examples␈α
of␈αrecursive␈α
functions␈α
and␈α
their␈α
application:␈α
We␈α
define␈α ␈↓αlast␈↓
␈↓by

␈↓        ␈↓αlast␈↓↓[␈↓αx␈↓↓]␈α
←␈α
␈↓βif␈α
n␈α
d␈α␈↓αx␈α
␈↓βthen␈α
a␈α
␈↓αx␈α
␈↓βelse␈α␈↓αlast␈↓↓[␈↓βd␈α
␈↓αx␈↓↓],

␈↓↓␈↓and␈α
we␈α
compute

␈↓        ␈↓αlast␈↓↓[␈↓∧(A␈αB␈αC)␈↓↓]␈α=␈α␈↓βif␈α
nd␈↓∧(A␈αB␈αC)␈α␈↓βthen␈αa␈↓∧(A␈α
B␈αC)␈α␈↓βelse␈α␈↓αlast␈↓↓[␈↓βd␈↓∧(A␈αB␈α
C)␈↓↓]
␈↓␈↓ ¬xCHAPTER I␈↓ :12


␈↓↓                      =␈α␈↓αlast␈↓↓[␈↓∧(B␈αC)␈↓↓]

␈↓↓                      =␈α␈↓αlast␈↓↓[␈↓∧(C)␈↓↓]

␈↓↓                      =␈α␈↓∧C.

␈↓∧␈↓Clearly␈α
  ␈↓αlast␈↓␈α
  computes␈α the␈α
 last␈α
element␈αof␈α
a␈α
list.␈α ␈↓αlast␈↓↓[␈↓∧NIL␈↓↓]␈↓␈α
is␈α
undefined␈αin␈α
the␈α
LISP␈αlanguage;
␈↓the␈α⊃result␈α⊂of␈α⊃trying␈α⊂ to␈α⊃ compute␈α⊂ it␈α⊃may␈α⊂be␈α⊃an␈α⊂error␈α⊃message␈α⊂or␈α⊃may␈α⊂be␈α⊃some␈α⊃random␈α⊂result
␈↓depending␈α
on␈α
the␈α
implementation.

␈↓        The␈α
function␈α
 ␈↓αsubst␈↓␈α
 is␈α
defined␈α
by

␈↓        ␈↓αsubst␈↓↓[␈↓αx, y, z␈↓↓] ← ␈↓βif at ␈↓αz ␈↓βthen ␈↓↓[␈↓βif ␈↓αz ␈↓βeq ␈↓αy ␈↓βthen ␈↓αx ␈↓βelse ␈↓αz␈↓↓]
␈↓↓                        ␈↓βelse ␈↓αsubst␈↓↓[␈↓αx, y, ␈↓βa ␈↓αz␈↓↓].␈↓αsubst␈↓↓[␈↓αx, y, ␈↓βd ␈↓αz␈↓↓].

␈↓↓␈↓We have

␈↓        ␈↓αsubst␈↓↓[␈↓∧(A.B), X, ((X.A).X)␈↓↓] =

␈↓↓␈↓                ␈↓↓= ␈↓αsubst␈↓↓[␈↓∧(A.B), X, (X.A)␈↓↓]␈↓αsubst␈↓↓[␈↓∧(A.B), X, X␈↓↓]

␈↓↓␈↓                ␈↓↓= [␈↓αsubst␈↓↓[␈↓∧(A.B), X, X␈↓↓].␈↓αsubst␈↓↓[␈↓∧(A.B), X, A␈↓↓]].␈↓∧(A.B)

␈↓∧␈↓                ␈↓∧␈↓↓= [[␈↓∧(A.B)␈↓↓].␈↓∧A␈↓↓].␈↓∧(A.B)␈↓↓]

␈↓↓␈↓                ␈↓↓= ␈↓∧(((A.B).A).(A.B)).

␈↓∧␈↓αsubst␈↓␈α
 computes␈α
the␈α
result␈α
of␈α
substituting␈α
the␈αS-expression␈α
  ␈↓αx␈↓␈α
  for␈α
the␈α
 atom␈α
 ␈↓αy␈↓␈α
 in␈αthe␈α
S-expression
␈↓␈↓αz␈↓.␈α
 This␈α
is␈α
an␈α
important␈α
operation␈α
in␈α
all␈α
kinds␈α
of␈α
symbolic␈α
computation.

␈↓        Another␈α
important␈α
operation␈α
is␈α∞the␈α
 concatenation␈α
 of␈α
 lists,␈α∞and␈α
 it␈α
is␈α
generally␈α∞denoted␈α
by
␈↓the␈α
infixed␈α
expression␈α
 ␈↓αx␈↓↓*␈↓αy␈↓␈α
 since␈α
it␈α
is␈α
associative.␈α
 We␈α
have␈α
the␈α
examples

␈↓        ␈↓∧(A␈αB␈αC)␈↓↓*␈↓∧(D␈αE␈αF)␈α␈↓↓=␈α␈↓∧(A␈αB␈αC␈αD␈αE␈αF),

␈↓∧␈↓and

␈↓        ␈↓∧NIL␈↓↓*␈↓∧(A␈αB)␈α␈↓↓=␈α␈↓∧(A␈αB)␈α␈↓↓=␈α␈↓∧(A␈αB)␈↓↓*␈↓∧NIL,

␈↓∧␈↓and␈α
the␈α
formal␈α
definition

␈↓        ␈↓αx␈↓↓*␈↓αy␈α
␈↓↓←␈α
␈↓βif␈α
n␈α
␈↓αx␈α
␈↓βthen␈α
␈↓αy␈α
␈↓βelse␈α
␈↓↓[␈↓βa␈α␈↓αx␈↓↓].[[␈↓βd␈α
␈↓αx␈↓↓]*␈↓αy␈↓↓].

␈↓↓␈↓        ␈↓↓␈↓The␈α∂ Boolean␈α∂ operations␈α∂can␈α∞also␈α∂be␈α∂used␈α∂in␈α∞making␈α∂recursive␈α∂definitions␈α∂ provided␈α∞ we
␈↓observe␈α
 the␈α
 order␈α
  of␈α
  evaluation␈α
  of␈α
constituents.␈α
First,␈α
we␈α
define␈α
a␈α
predicate␈α
 ␈↓αequal␈↓␈α
 by

␈↓        ␈↓αequal␈↓↓[␈↓αx, y␈↓↓] ← ␈↓αx ␈↓βeq ␈↓αy ␈↓↓∨ [¬␈↓βat ␈↓αx ␈↓↓∧ ¬␈↓βat ␈↓αy ␈↓↓∧
␈↓↓                        ␈↓αequal␈↓↓[␈↓βa ␈↓αx, ␈↓βa ␈↓αy␈↓↓] ∧ ␈↓αequal␈↓↓[␈↓βd ␈↓αx, ␈↓βd ␈↓αy␈↓↓]].
␈↓␈↓ ¬xCHAPTER I␈↓ :13


␈↓↓␈↓αequal␈↓↓[␈↓αx,␈α
y␈↓↓]␈↓␈α
 is␈α
true␈α
 if␈α
 and␈α only␈α
 if␈α
  ␈↓αx␈↓␈α
  and␈α
  ␈↓αy␈↓␈α
  are␈α the␈α
 same␈α
S-expression,␈α
 and␈α
 the␈α
 use␈α of
␈↓this␈α
predicate␈α
makes␈α
up␈α
for␈α∞the␈α
fact␈α
that␈α
the␈α
basic␈α∞predicate␈α
 ␈↓βeq␈↓␈α
 is␈α
guaranteed␈α
 to␈α∞ test␈α
 equality
␈↓only␈α
when␈α
 one␈α
 of␈α
the␈α
operands␈α
is␈α
known␈α
to␈α
be␈α
an␈α
atom.␈α
 We␈α
shall␈α
also␈α
use␈α
the␈α
infixes␈α
 ␈↓↓=␈↓␈α
 and␈α
 ␈↓↓≠␈↓.

␈↓        Membership␈α
of␈α
an␈α
S-expression␈α
 ␈↓αx␈↓␈α
 in␈α
a␈α
list␈α
 ␈↓αy␈↓␈α
 is␈α
tested␈α
by

␈↓        ␈↓αmember␈↓↓[␈↓αx,␈α
y␈↓↓]␈α←␈α
¬␈↓βn␈α␈↓αy␈α
␈↓↓∧␈α[[␈↓αx␈α
␈↓↓=␈α␈↓βa␈α
␈↓αy␈↓↓]␈α∨␈α
␈↓αmember␈↓↓[␈↓αx,␈α␈↓βd␈α
␈↓αy␈↓↓]].

␈↓↓␈↓This␈α
relation␈α
is␈α
also␈α
denoted␈α
by␈α
 ␈↓αx␈↓↓ε␈↓αy.␈α
 Here␈α
are␈α
some␈α
computations:

␈↓α␈↓        ␈↓αmember␈↓↓[␈↓∧B, (A B)␈↓↓] = ¬␈↓βn ␈↓∧(A B) ␈↓↓∧ [[␈↓∧B ␈↓↓= ␈↓βa ␈↓∧(A B)␈↓↓]
␈↓↓                            ∨ ␈↓αmember␈↓↓[␈↓∧B, ␈↓βd ␈↓∧(A B)␈↓↓]],

␈↓↓                        = ␈↓αmember␈↓↓[␈↓∧B, (B)␈↓↓]

␈↓↓                        = ␈↓∧T.

␈↓∧␈↓        ␈↓∧␈↓Sometimes␈α a␈α function␈α is␈α
defined␈αwith␈αthe␈αhelp␈αof␈α
auxiliary␈αfunctions.␈α Thus,␈αthe␈αreverse␈α
of
␈↓a␈αlist␈α
 ␈↓αx␈↓␈α,␈α
(e.g.␈α  ␈↓αreverse␈↓↓[␈↓∧(A␈α
B␈αC␈α
D)␈↓↓]␈α=␈α
␈↓∧(D␈αC␈α
B␈αA)␈↓),␈α
is␈αgiven␈α
by

␈↓        ␈↓αreverse␈↓↓[␈↓αx␈↓↓] ← ␈↓αrev␈↓↓[␈↓αx, ␈↓∧NIL␈↓↓]

␈↓↓␈↓where

␈↓        ␈↓αrev␈↓↓[␈↓αx, y␈↓↓]   ← ␈↓βif n ␈↓αx ␈↓βthen ␈↓αy ␈↓βelse ␈↓αrev␈↓↓[␈↓βd ␈↓αx␈↓↓, [␈↓βa ␈↓αx␈↓↓].␈↓αy␈↓↓].

␈↓↓␈↓A computation is

␈↓        ␈↓αreverse␈↓↓[␈↓∧(A B C)␈↓↓] = ␈↓αrev␈↓↓[␈↓∧(A B C), NIL␈↓↓]

␈↓↓                         = ␈↓αrev␈↓↓[␈↓∧(B C), (A)␈↓↓]

␈↓↓                         = ␈↓αrev␈↓↓[␈↓∧(C), (B A)␈↓↓]

␈↓↓                         = ␈↓αrev␈↓↓[␈↓∧NIL, (C B A)␈↓↓]

␈↓↓                         = ␈↓∧(C B A).

␈↓∧␈↓        ␈↓∧␈↓A more elaborate example of recursive definition is given by

␈↓        ␈↓αflatten␈↓↓[␈↓αx␈↓↓] ← ␈↓αflat␈↓↓[␈↓αx, ␈↓∧NIL␈↓↓]

␈↓↓␈↓        ␈↓↓␈↓αflat␈↓↓[␈↓αx, y␈↓↓] ← ␈↓βif at ␈↓αx ␈↓βthen ␈↓αx.y
␈↓α                              ␈↓βelse ␈↓αflat␈↓↓[␈↓βa ␈↓αx, flat␈↓↓[␈↓βd ␈↓αx, y␈↓↓]].

␈↓↓␈↓We have

␈↓        ␈↓αflatten␈↓↓[␈↓∧((A.B).C)␈↓↓] = ␈↓αflat␈↓↓[␈↓∧((A.B).C), NIL␈↓↓]
␈↓␈↓ ¬xCHAPTER I␈↓ :14


␈↓↓                           = ␈↓αflat␈↓↓[␈↓∧(A.B), ␈↓αflat␈↓↓[␈↓∧C, NIL␈↓↓]]

␈↓↓                           = ␈↓αflat␈↓↓[␈↓∧(A.B), (C)␈↓↓]

␈↓↓                           = ␈↓αflat␈↓↓[␈↓∧A, ␈↓αflat␈↓↓[␈↓∧B, (C)␈↓↓]]

␈↓↓                           = ␈↓αflat␈↓↓[␈↓∧A, (B C)␈↓↓]

␈↓↓                           = ␈↓∧(A B C).

␈↓∧␈↓The␈α
 reader␈α
 will␈αsee␈α
that␈α
the␈αvalue␈α
of␈α
 ␈↓αflatten␈↓↓[␈↓αx␈↓↓]␈↓␈α is␈α
a␈α
list␈αof␈α
the␈α
atoms␈α of␈α
 the␈α
 S-expression␈α  ␈↓αx␈↓
␈↓from␈α  left␈α
  to␈α  write.␈α   Thus␈α
␈↓αflatten␈↓↓[␈↓∧((A␈αB)␈α
A)␈↓↓]␈α=␈α␈↓∧(A␈α
B␈αNIL␈αA␈α
NIL)␈↓.

␈↓        Many␈α⊃ functions␈α⊃ can␈α⊃be␈α⊃conveniently␈α⊃written␈α⊃in␈α⊃more␈α⊃than␈α⊃one␈α⊃way.␈α⊃ For␈α⊃example,␈α⊂the
␈↓function␈α
  ␈↓αreverse␈↓␈α
  mentioned␈α
 above␈α
 can␈α
 be␈α
written␈α
without␈α
an␈α
auxiliary␈α
function␈α
as␈α
follows:

␈↓        ␈↓αreverse␈↓↓[␈↓αx␈↓↓]␈α
←␈α␈↓βif␈α
n␈α␈↓αx␈α
␈↓βthen␈α
␈↓∧NIL␈α␈↓βelse␈α
␈↓αreverse␈↓↓[␈↓βd␈α␈↓αx␈↓↓]*␈↓∧<a␈α
x>

␈↓∧␈↓but␈α
it␈α
will␈α
be␈α
explained␈α
later␈α
that␈α
the␈α
earlier␈α
 definition␈α
 involves␈α
less␈α
computation.

␈↓        The␈α∞use␈α∞of␈α∞conditional␈α
 expressions␈α∞ for␈α∞ recursive␈α∞ function␈α
definition␈α∞ is␈α∞ not␈α∞ limited␈α
 to
␈↓functions␈α of␈α S-expressions.␈α  For␈αexample,␈αthe␈αfactorial␈αfunction␈αand␈αthe␈αEuclidean␈αalgorithm␈α for
␈↓the␈α
greatest␈α
common␈α
divisor␈α
are␈α
expressed␈α
as␈α
follows:

␈↓        ␈↓αn␈↓↓! ← ␈↓βif ␈↓αn␈↓↓=␈↓∧0 ␈↓βthen ␈↓∧1 ␈↓βelse ␈↓αn␈↓↓(␈↓αn␈↓↓-␈↓∧1␈↓↓)!

␈↓↓␈↓and

␈↓        ␈↓αgcd␈↓↓(␈↓αm, n␈↓↓) ← ␈↓βif ␈↓αm␈↓↓>␈↓αn ␈↓βthen ␈↓αgcd␈↓↓(␈↓αn, m␈↓↓) ␈↓βelse if ␈↓αm␈↓↓=␈↓∧0 ␈↓βthen ␈↓αn
␈↓α                        ␈↓βelse ␈↓αgcd␈↓↓(␈↓αn mod m, m␈↓↓)

␈↓↓␈↓where␈α
 ␈↓αn␈α
mod␈α
m␈↓␈α
 denotes␈αthe␈α
remainder␈α
when␈α
 ␈↓αn␈↓␈α
 is␈α
divided␈αby␈α
 ␈↓αm␈↓␈α
  and␈α
may␈α
itself␈α
be␈αexpressed
␈↓recursively␈α
by

␈↓        ␈↓αn␈α
mod␈α
m␈α
␈↓↓←␈α
␈↓βif␈α␈↓αn␈↓↓<␈↓αm␈α
␈↓βthen␈α
␈↓αn␈α
␈↓βelse␈α
␈↓↓(␈↓αn␈↓↓-␈↓αm␈↓↓)␈α␈↓αmod␈α
m.

␈↓α␈↓                              Exercises

␈↓        1.␈α
Consider␈α
the␈α
function␈α
 ␈↓αdrop␈↓␈α
 defined␈α
by

␈↓        ␈↓αdrop␈↓↓[␈↓αx␈↓↓]␈α
←␈α
␈↓βif␈αn␈α
␈↓αx␈α
␈↓βthen␈α␈↓∧NIL␈α
␈↓βelse␈α
␈↓↓<␈↓βa␈α␈↓αx␈↓↓>.␈↓αdrop␈↓↓[␈↓βd␈α
␈↓αx␈↓↓].

␈↓↓␈↓Compute␈α
(by␈α
hand)␈α
 ␈↓αdrop␈↓↓[␈↓∧(A␈α
B␈α
C)␈↓↓]␈↓.␈α What␈α
does␈α
 ␈↓αdrop␈↓␈α
 do␈α
 to␈α
 lists␈α in␈α
general?

␈↓        2.␈α
What␈α
does␈α
the␈α
function

␈↓        ␈↓αr2␈↓↓[␈↓αx␈↓↓]␈α
←␈α
␈↓βif␈αn␈α
␈↓αx␈α
␈↓βthen␈α␈↓∧NIL␈α
␈↓βelse␈α
␈↓αreverse␈↓↓[␈↓βa␈α␈↓αx␈↓↓].␈↓αr2␈↓↓[␈↓βd␈α
␈↓αx␈↓↓]
␈↓␈↓ ¬xCHAPTER I␈↓ :15


␈↓↓␈↓do␈α
to␈α
lists␈α
of␈α
lists?␈α
 How␈α
about

␈↓        ␈↓αr3␈↓↓[␈↓αx␈↓↓]␈α
←␈α
␈↓βif␈αat␈α
␈↓αx␈α
␈↓βthen␈α
␈↓αx␈α␈↓βelse␈α
␈↓αreverse␈↓↓[␈↓αr4␈↓↓[␈↓αx␈↓↓]]

␈↓↓␈↓        ␈↓↓␈↓αr4␈↓↓[␈↓αx␈↓↓]␈α
←␈α
␈↓βif␈αn␈α
␈↓αx␈α
␈↓βthen␈α␈↓∧NIL␈α
␈↓βelse␈α
␈↓αr3␈↓↓[␈↓βa␈α␈↓αx␈↓↓].␈↓αr4␈↓↓[␈↓βd␈α
␈↓αx␈↓↓]?

␈↓↓␈↓        ␈↓↓␈↓3.␈α
Compare

␈↓        ␈↓αr3'␈↓↓[␈↓αx␈↓↓]␈α
←␈α
␈↓βif␈α
at␈α␈↓αx␈α
␈↓βthen␈α
␈↓αx␈α
␈↓βelse␈α
␈↓αr3'␈↓↓[␈↓βd␈α␈↓αx␈↓↓]*<␈↓αr3'␈↓↓[␈↓βa␈α
␈↓αx␈↓↓]>

␈↓↓␈↓with␈α
the␈α
function␈α
 ␈↓αr3␈↓␈α
 of␈α
the␈α
preceding␈α
example.

␈↓        4.␈α
Consider␈α
 ␈↓αr5␈↓␈α
 defined␈α
by

␈↓        ␈↓αr5␈↓↓[␈↓αx␈↓↓] ← ␈↓βif n ␈↓αx ␈↓↓∨ ␈↓βn d ␈↓αx ␈↓βthen ␈↓αx
␈↓α␈↓                ␈↓α␈↓βelse ␈↓↓[␈↓βa ␈↓αr5␈↓↓[␈↓βd ␈↓αx␈↓↓]]
␈↓↓                        . ␈↓αr5␈↓↓[␈↓βa ␈↓αx . r5␈↓↓[␈↓βd ␈↓αr5␈↓↓[␈↓βd ␈↓αx␈↓↓]]].

␈↓↓␈↓Compute␈α ␈↓αr5␈↓↓[␈↓∧(A␈αB␈αC␈αD)␈↓↓]␈↓.␈α What␈αdoes␈α ␈↓∧r5␈↓␈α do␈αin␈αgeneral?␈α  Needless␈α to␈αsay,␈αthis␈αis␈αnot␈αa␈αgood␈αway
␈↓of␈α
computing␈α
this␈α
function␈α
even␈α
though␈α
it␈α
involves␈α
no␈α
auxiliary␈α
functions.



␈↓9.  ␈↓βLambda␈α
expressions␈α
and␈α
functions␈α
with␈α
functions␈α
as␈α
arguments.␈↓


␈↓        It␈α
is␈α
common␈α
to␈α
use␈α
phrases␈α
like␈α
"the␈α
function␈α
 2␈↓αx␈↓↓+␈↓αy␈↓".␈α
  This␈α
is␈α
 not␈α
a␈α
precise␈αnotation␈α
because
␈↓we␈α
cannot␈αsay␈α
 2␈↓αx␈↓↓+␈↓αy␈↓↓(␈↓∧3,␈α
4␈↓↓)␈↓␈α and␈α
know␈α
whether␈αthe␈α
desired␈α
 result␈α is␈α
  2␈↓
␈␈↓3+4␈α
  or␈α  2␈↓
␈␈↓4+3␈α
  regarding
␈↓the␈α∞expression␈α∞ as␈α∞a␈α∞function␈α∞of␈α∞two␈α∞variables.␈α∞ Worse␈α∞yet,␈α∞we␈α∞might␈α∞have␈α∞meant␈α∞a␈α∞one-variable
␈↓function␈α
of␈α
 ␈↓αx␈↓␈α
 wherein␈α
 ␈↓αy␈↓␈α
  is␈α
 regarded␈α
 as␈α
 a␈α
parameter.

␈↓        The␈α∂problem␈α∂ of␈α⊂ giving␈α∂ names␈α∂ to␈α∂ functions␈α⊂ is␈α∂ solved␈α∂ by␈α∂Church's␈α⊂  λ-notation.␈α∂   In
␈↓the␈α∂ above␈α∂ example,␈α∂ we␈α∂ would␈α∂ write␈α∂␈↓↓λ␈↓αx␈α⊂y␈↓↓:␈α∂␈↓∧2␈↓αx␈↓↓+␈↓αy␈↓␈α∂ to␈α∂denote␈α∂ the␈α∂ function␈α∂ of␈α⊂ two␈α∂ variables
␈↓with␈α first␈αargument␈α  ␈↓αx␈↓␈α  and␈α second␈α argument␈α
  ␈↓αy␈↓␈α whose␈αvalue␈αis␈αgiven␈αby␈αthe␈αexpression␈α
 2␈↓αx␈↓↓+␈↓αy␈↓.
␈↓Thus,

␈↓        ␈↓↓[λ␈↓αx␈αy␈↓↓:␈α␈↓∧2␈↓αx␈↓↓+␈↓αy␈↓↓][␈↓∧3,␈α4␈↓↓]␈α=␈α
␈↓∧10␈↓.

␈↓Likewise,␈α∩  ␈↓↓[λ␈↓αy␈α⊃x␈↓↓:␈α∩␈↓∧2␈↓αx␈↓↓+␈↓αy␈↓↓][␈↓∧3,␈α⊃4␈↓↓]␈α∩=␈α⊃␈↓∧11␈↓.␈α∩ Like␈α⊃variables␈α∩of␈α⊃integration␈α∩and␈α⊃the␈α∩bound␈α∩variables␈α⊃of
␈↓quantifiers␈αin␈α
logic,␈αvariables␈α
following␈α  λ␈α
are␈α bound␈α
 or␈αdummy␈α
and␈αthe␈α
expression␈αas␈α
a␈αwhole
␈↓may␈α
be␈α∞replaced␈α
by␈α
any␈α∞others␈α
provided␈α
the␈α∞replacement␈α
is␈α
done␈α∞consistently␈α
and␈α
does␈α∞not␈α
make
␈↓any␈α∂ variable␈α∞ bound␈α∂ by␈α∂ λ␈α∞ the␈α∂same␈α∂as␈α∞a␈α∂free␈α∂variable␈α∞in␈α∂the␈α∂expression.␈α∞ Thus␈α∂  ␈↓↓λ␈↓αx␈α∂y␈↓↓:␈α∞␈↓∧2␈↓αx␈↓↓+␈↓αy␈↓
␈↓represents␈α the␈α same␈α
  function␈α  as␈α␈↓↓λ␈↓αy␈αx␈↓↓:␈α
␈↓∧2␈↓αy␈↓↓+␈↓αx␈↓␈αor␈α␈↓↓λ␈↓αu␈αv␈↓↓:␈α
␈↓∧2␈↓αu␈↓↓+␈↓αv␈↓␈α,␈αbut␈αin␈α
the␈αfunction␈αof␈αone␈α
argument
␈↓␈↓↓λ␈↓αx␈↓↓:␈α
␈↓∧2␈↓αx␈↓↓+␈↓αy␈↓␈α
,␈α
we␈α
cannot␈α
replace␈α
the␈α
variable␈α
 ␈↓αx␈↓␈α
 by␈α
␈↓αy␈↓␈α
,␈α
though␈α
we␈α
could␈α
replace␈α
it␈αby␈α
 ␈↓αu␈↓.

␈↓        λ-notation␈αplays␈αtwo␈αimportant␈α roles␈α in␈α LISP.␈α  First,␈α it␈αallows␈αus␈αto␈αrewrite␈αan␈αexpression
␈↓containing␈αtwo␈αor␈αmore␈αoccurrences␈αof␈αthe␈αsame␈αsub-expression␈αin␈αsuch␈αa␈αway␈αthat␈αthe␈α expression
␈↓␈↓ ¬xCHAPTER I␈↓ :16


␈↓occurs␈α∞only␈α∞once.␈α∞Thus␈α∞  ␈↓↓(␈↓∧2␈↓αx␈↓↓+␈↓∧1␈↓↓)↑␈↓∧4␈↓↓+␈↓∧3␈↓↓(␈↓∧2␈↓αx␈↓↓+␈↓∧1␈↓↓)↑␈↓∧3␈↓␈α∞ can␈α∞be␈α∞written␈α∞␈↓↓[λ␈↓αw␈↓↓:␈α∞␈↓αw␈↓↓↑␈↓∧4␈↓↓+␈↓∧3␈↓αw␈↓↓↑␈↓∧3␈↓↓][␈↓∧2␈↓αx␈↓↓+␈↓∧1␈↓↓]␈↓.␈α∞This␈α∂can␈α∞save
␈↓considerable␈αcomputation,␈α
and␈αcorresponds␈α
to␈αthe␈αpractice␈α
in␈αordinary␈α
programming␈αof␈αassigning␈α
to
␈↓a␈αvariable␈αthe␈αvalue␈αof␈αa␈αsub-expression␈αthat␈αoccurs␈αmore␈αthan␈αonce␈α in␈αan␈α expression␈α and␈α then
␈↓writing␈α
 the␈α
 expression␈α
 in␈α
 terms␈α
of␈α
the␈α
variable.

␈↓        The␈α∂second␈α∞use␈α∂of␈α∞λ-expressions␈α∂is␈α∞in␈α∂ using␈α∞ functions␈α∂ that␈α∞take␈α∂functions␈α∂as␈α∞arguments.
␈↓Suppose␈αwe␈α
want␈αto␈αform␈α
a␈αnew␈αlist␈α
from␈αan␈αold␈α
one␈αby␈αapplying␈α
a␈αfunction␈α ␈↓αf␈↓␈α
 to␈αeach␈αelement␈α
 of
␈↓the␈α
 list.␈α
 This␈α
can␈α
be␈α
done␈α
using␈α
the␈α
function␈α
 ␈↓αmapcar␈↓␈α
 defined␈α
by

␈↓        ␈↓αmapcar␈↓↓[␈↓αx,␈α
f␈↓↓]␈α←␈α
␈↓βif␈α
n␈α␈↓αx␈α
␈↓βthen␈α
␈↓∧NIL␈α␈↓βelse␈α
␈↓αf␈↓↓[␈↓βa␈α
␈↓αx␈↓↓]␈α .␈α
␈↓αmapcar␈↓↓[␈↓βd␈α␈↓αx,␈α
f␈↓↓].

␈↓↓␈↓Suppose␈α
the␈αoperation␈α
we␈αwant␈α
to␈αperform␈α
is␈α
squaring,␈αand␈α
we␈αwant␈α
 to␈αapply␈α
it␈α
to␈αthe␈α
list␈α ␈↓∧(1␈α
2␈α3␈α
4
␈↓∧5␈α6␈α
7)␈↓.␈α We␈α
have

␈↓        ␈↓αmapcar␈↓↓[␈↓∧(1␈α2␈α3␈α4␈α5␈α6␈α7),␈α␈↓↓λ␈↓αx␈↓↓:␈α␈↓αx␈↓↓↑␈↓∧2␈↓↓]␈α=␈α␈↓∧(1␈α4␈α9␈α16␈α25␈α36␈α49).

␈↓∧␈↓        ␈↓∧␈↓A␈α
more␈α
generally␈α
useful␈α
operation␈α
than␈α ␈↓αmapcar␈↓␈α
is␈α
␈↓αmaplist␈↓␈α
in␈α
 which␈α
 the␈α
 function␈αis␈α
applied
␈↓to␈α
the␈α
successive␈α
sublists␈α
of␈α
the␈α
list␈α
rather␈α
than␈α
to␈α
the␈α
elements.␈α
 ␈↓αmaplist␈↓␈α
 is␈α
defined␈α
by

␈↓        ␈↓αmaplist␈↓↓[␈↓αx,␈α
f␈↓↓]␈α←␈α
␈↓βif␈α
n␈α␈↓αx␈α
␈↓βthen␈α␈↓∧NIL␈α
␈↓βelse␈α
␈↓αf␈↓↓[␈↓αx␈↓↓]␈α .␈α
␈↓αmaplist␈↓↓[␈↓βd␈α␈↓αx,␈α
f␈↓↓].

␈↓↓␈↓        ␈↓↓␈↓As␈α∞ an␈α∞ application␈α∞ of␈α∂ ␈↓αmaplist␈↓␈α∞and␈α∞functional␈α∞arguments,␈α∂we␈α∞shall␈α∞define␈α∞a␈α∂function␈α∞ for
␈↓differentiating␈α algebraic␈α expressions␈αinvolving␈αsums␈αand␈αproducts.␈α The␈αexpressions␈αare␈αbuilt␈αup
␈↓from␈α
atoms␈α
denoting␈α
variables␈α
and␈α
integer␈α
constants␈α
according␈α
to␈α
the␈α
syntax

␈↓        <expression> ::= <variable> | <integer> |
␈↓                         (PLUS <explist>) | (TIMES <explist>)

␈↓        <explist>    ::= <expression> | <expression><explist>

␈↓Here,␈α∂ ␈↓∧PLUS␈↓␈α⊂ followed␈α∂by␈α⊂a␈α∂list␈α⊂of␈α∂arguments␈α⊂denotes␈α∂the␈α⊂sum␈α∂of␈α⊂these␈α∂arguments␈α⊂and␈α∂ ␈↓∧TIMES␈↓
␈↓followed␈α
by␈αa␈α
list␈α
of␈αarguments␈α
 denotes␈α
 their␈αproduct.␈α
  The␈α
 function␈α  ␈↓αdiff␈↓↓[␈↓αe,␈α
v␈↓↓]␈↓␈α
 gives␈αthe␈α
partial
␈↓derivative␈α
of␈α
the␈α
expression␈α
 ␈↓αe␈↓␈α
 with␈α
respect␈α
to␈α
the␈α
variable␈α
 ␈↓αv␈↓.␈α
We␈α
have

␈↓        ␈↓αdiff␈↓↓[␈↓αe, v␈↓↓] ← ␈↓βif at ␈↓αe ␈↓βthen ␈↓↓[␈↓βif ␈↓αe ␈↓βeq ␈↓αv ␈↓βthen ␈↓∧1 ␈↓βelse ␈↓∧0␈↓↓]
␈↓↓␈↓                ␈↓↓␈↓βelse if a ␈↓αe ␈↓βeq ␈↓∧PLUS ␈↓βthen
␈↓β                        ␈↓∧PLUS . ␈↓αmapcar␈↓↓[␈↓βd ␈↓αe␈↓↓, λ␈↓αx␈↓↓: ␈↓αdiff␈↓↓[␈↓αx, v␈↓↓]_]
␈↓↓␈↓                ␈↓↓␈↓βelse if a ␈↓αe ␈↓βeq ␈↓∧TIMES ␈↓αthen
␈↓α                        ␈↓∧PLUS.␈↓αmaplist␈↓↓[␈↓βd ␈↓αe␈↓↓, λ␈↓αx␈↓↓: ␈↓∧TIMES
␈↓∧                              . ␈↓αmaplist␈↓↓[␈↓βd ␈↓αe␈↓↓, λ␈↓αy␈↓↓: ␈↓βif ␈↓αx ␈↓βeq ␈↓αy ␈↓βthen
␈↓β                                        ␈↓αdiff␈↓↓[␈↓βa ␈↓αy, v␈↓↓] ␈↓βelse a ␈↓αy␈↓↓]].

␈↓↓␈↓The␈α
 term␈α
 that␈α
 describes␈α
 the␈α
 rule␈α
 for␈α
 differentiating␈α
 products␈α
corresponds␈α
to␈α
the␈α
rule

␈↓        ␈↓↓∂/∂␈↓αv    e␈↓¬i␈↓↓ =       [␈↓βif ␈↓αi␈↓↓=␈↓αj ␈↓βthen ␈↓↓∂␈↓αe␈↓¬j␈↓↓/∂␈↓αv ␈↓βelse ␈↓αe␈↓¬j␈↓↓].
␈↓␈↓ ¬xCHAPTER I␈↓ :17


␈↓↓and␈α  ␈↓αmaplist␈↓␈α  has␈α to␈αbe␈αused␈αrather␈α
than␈α ␈↓αmapcar␈↓␈α since␈αwhether␈αto␈αdifferentiate␈αin␈α
forming␈αthe
␈↓product␈αis␈αdetermined␈αby␈αequality␈αof␈αthe␈αindices␈α  ␈↓αi␈↓␈α  and␈α  ␈↓αj␈↓␈α  rather␈α than␈αequality␈αof␈αthe␈αterms␈α ␈↓αe␈↓¬i␈↓
␈↓and␈α
␈↓αe␈↓¬j␈↓.

␈↓        Two␈αmore␈αuseful␈αfunctions␈αwith␈αfunctions␈αas␈αarguments␈αare␈αthe␈αpredicates␈α ␈↓αandlis␈↓␈α and␈α ␈↓αorlis␈↓
␈↓defined␈α
by␈α
the␈α
equations

␈↓        ␈↓αandlis␈↓↓[␈↓αu,␈α
p␈↓↓]␈α←␈α
␈↓βn␈α␈↓αu␈α
␈↓↓∨␈α[␈↓αp␈↓↓[␈↓βa␈α
␈↓αu␈↓↓]␈α∧␈α
␈↓αandlis␈↓↓[␈↓βd␈α␈↓αu,␈α
p␈↓↓]]

␈↓↓␈↓and

␈↓        ␈↓αorlis␈↓↓[␈↓αu,␈α
p␈↓↓]␈α←␈α
¬␈↓βn␈α␈↓αu␈α
␈↓↓∧␈α[␈↓αp␈↓↓[␈↓βa␈α
␈↓αu␈↓↓]␈α∨␈α
␈↓αorlis␈↓↓[␈↓βd␈α␈↓αu,␈α
p␈↓↓]].

␈↓↓␈↓                              Exercises

␈↓        1.␈α
Compute␈α ␈↓αdiff␈↓↓[␈↓∧(TIMES␈α
X␈α
(PLUS␈αY␈α
1)␈α3),␈α
X␈↓↓]␈↓␈α
 using␈α the␈α
 above␈α
definition␈α of␈α
 ␈↓αdiff␈↓.␈α Now␈α
do
␈↓you␈α
see␈α
why␈α
algebraic␈α
simplification␈α
is␈α
important?

␈↓        2.␈αCompute␈α ␈↓αorlis␈↓↓[␈↓∧((A␈α
B)␈α(C␈αD)␈αE),␈α
␈↓βat␈↓↓]␈↓.



␈↓10.  ␈↓βLabel.␈↓


␈↓        The␈α
λ␈αmechanism␈α
is␈α
 not␈α adequate␈α
 for␈α
 providing␈α names␈α
 for␈α
recursive␈α functions,␈α
 because
␈↓in␈α∪this␈α∪case␈α∩there␈α∪has␈α∪to␈α∩be␈α∪a␈α∪way␈α∪of␈α∩referring␈α∪to␈α∪the␈α∩function␈α∪name␈α∪within␈α∪the␈α∩ function.
␈↓Therefore,␈α we␈αuse␈α the␈αnotation␈α ␈↓βlabel␈↓↓[␈↓αf,␈αe␈↓↓]␈↓␈α to␈αdenote␈αthe␈αexpression␈α ␈↓αe␈↓␈α but␈αwhere␈α
occurrences␈αof
␈↓␈↓αf␈↓␈α⊃ within␈α⊃ ␈↓αe␈↓␈α⊃ refer␈α⊃ to␈α⊃ the␈α⊃ whole␈α∩ expression.␈α⊃ For␈α⊃example,␈α⊃ suppose␈α⊃we␈α⊃wished␈α⊃to␈α∩define␈α⊃a
␈↓function␈αthat␈α
takes␈αalternate␈αelements␈α
of␈αeach␈α
element␈αof␈αa␈α
list␈αand␈α
makes␈αa␈αlist␈α
of␈αthese.␈α  Thus,␈α
we
␈↓want

␈↓        ␈↓αglub␈↓↓[␈↓∧((A␈αB␈αC)␈α(A␈αB␈αC␈αD)␈α(X␈αY␈αZ))␈↓↓]␈α=␈α␈↓∧((A␈αC)␈α(A␈αC)␈α(X␈αZ)).

␈↓∧␈↓We␈α
can␈α
make␈α
the␈α
definition

␈↓        ␈↓αglub␈↓↓[␈↓αx␈↓↓] ← ␈↓αmapcar␈↓↓[␈↓αx, ␈↓βlabel␈↓↓[␈↓αalt␈↓↓, λ␈↓αx␈↓↓: ␈↓βif n ␈↓αx ␈↓↓∨ ␈↓βn d ␈↓αx ␈↓βthen ␈↓αx
␈↓α                                        ␈↓βelse a ␈↓αx . alt␈↓↓[␈↓βdd ␈↓αx␈↓↓]]].

␈↓↓␈↓The␈αidentifier␈α
 ␈↓αalt␈↓␈α in␈αthe␈α
above␈αexample␈αis␈α
bound␈αby␈αthe␈α
 label␈α and␈αis␈α
 local␈α to␈α that␈α
 expression,
␈↓and␈α∞ this␈α∞is␈α∞the␈α∞general␈α∞rule.␈α
 The␈α∞label␈α∞ construction␈α∞is␈α∞not␈α∞often␈α
used␈α∞in␈α∞LISP␈α∞since␈α∞it␈α∞is␈α
more
␈↓usual␈αto␈α give␈αfunctions␈αglobal␈αdefinitions.␈αD.␈αM.␈αR.␈αPark␈αpointed␈αout␈αthat␈αif␈αwe␈αallow␈αvariables␈αto
␈↓represent␈α
functions␈α
and␈α
use␈α
a␈α
 suitable␈α
  λ␈α
construction,␈α
the␈α
use␈α
of␈α
 label␈α
 could␈α
be␈α
avoided.
␈↓␈↓ εP␈↓ :18


␈↓β␈↓ ¬rCHAPTER II

␈↓β␈↓ β.HOW TO WRITE RECURSIVE FUNCTION DEFINITIONS






␈↓1.  ␈↓βStatic␈α
and␈α
dynamic␈α
ways␈α
of␈α
programming.␈↓


␈↓        In␈α∪ order␈α∪ to␈α∀ write␈α∪recursive␈α∪function␈α∪definitions,␈α∀one␈α∪must␈α∪think␈α∀about␈α∪programming
␈↓differently␈α
than␈α
is␈α customary␈α
 when␈α
 writing␈α
programs␈α in␈α
 languages␈α
like␈αFortran␈α
or␈α
Algol␈α
or␈αin
␈↓machine␈α∀language.␈α∀ In␈α∀these␈α∃languages,␈α∀one␈α∀has␈α∀in␈α∀mind␈α∃the␈α∀state␈α∀of␈α∀the␈α∃ computation␈α∀ as
␈↓represented␈α
 by␈α∞ the␈α
 values␈α∞of␈α
certain␈α∞variables␈α
or␈α∞locations␈α
in␈α∞the␈α
memory␈α∞of␈α
the␈α∞machine,␈α
and
␈↓then␈α∂ one␈α∂ writes␈α∂ statements␈α∂ or␈α∂ machine␈α∂instructions␈α∞in␈α∂order␈α∂to␈α∂make␈α∂the␈α∂state␈α∂change␈α∂in␈α∞an
␈↓appropriate␈α
way.

␈↓        When␈αwriting␈α
LISP␈αrecursive␈α
functions␈αone␈α
thinks␈αdifferently.␈α
 Namely,␈αone␈α
thinks␈αabout␈α
the
␈↓value␈α⊂of␈α⊂the␈α⊃ function,␈α⊂ asks␈α⊂ for␈α⊂ what␈α⊃values␈α⊂ of␈α⊂the␈α⊂arguments␈α⊃the␈α⊂value␈α⊂of␈α⊂the␈α⊃function␈α⊂is
␈↓immediate,␈α∂and,␈α∂given␈α∂ an␈α∂ arbitrary␈α∂ values␈α∂ of␈α∂ the␈α∂ arguments,␈α∂ for␈α∂ what␈α∂ simpler␈α∂arguments
␈↓must␈α
 the␈α function␈α
be␈αknown␈α
in␈αorder␈α
to␈αgive␈α
the␈αvalue␈α
of␈αthe␈α
function␈αfor␈α
 the␈α given␈α
 arguments.
␈↓Let␈α us␈α take␈α a␈α numerical␈αexample;␈α namely,␈α suppose␈α we␈αwant␈αto␈αcompute␈αthe␈αfunction␈α ␈↓αn␈↓↓!␈↓.␈α For
␈↓what␈αargument␈αis␈αthe␈αvalue␈αof␈αthe␈αfunction␈αimmediate.␈α  Clearly,␈α for␈α␈↓αn␈α␈↓↓=␈α␈↓∧0␈α or␈α ␈↓αn␈α␈↓↓=␈α␈↓∧1␈↓,␈αthe␈αvalue␈αis
␈↓immediately␈α
seen␈α∞to␈α
be␈α
 1.␈α∞ Moreover,␈α
we␈α
can␈α∞get␈α
the␈α
value␈α∞for␈α
an␈α
arbitrary␈α∞ ␈↓αn␈↓␈α
 if␈α
we␈α∞know␈α
 the
␈↓value␈α∞ for␈α∞␈↓αn␈↓↓-␈↓∧1.␈α∞  Also,␈α∂we␈α∞see␈α∞that␈α∞knowing␈α∞the␈α∂value␈α∞for␈α∞ ␈↓αn␈α∞␈↓↓=␈α∞␈↓∧1␈α∂ is␈α∞redundant,␈α∞since␈α∞it␈α∂can␈α∞be
␈↓∧obtained␈αfrom␈αthe␈α ␈↓αn␈α
␈↓↓=␈α␈↓∧0␈α case␈αby␈αthe␈α
 same␈α rule␈α as␈αgets␈α it␈α
 for␈α a␈α general␈α ␈↓αn␈↓∧␈α from␈α
the␈αvalue
␈↓∧for␈α
 ␈↓αn␈↓↓-␈↓∧1␈↓.␈α
 All␈α
this␈α
talk␈α
leads␈α
to␈α
the␈α
simple␈αrecursive␈α
formula:

␈↓        ␈↓αn␈↓↓!␈α←␈α
␈↓βif␈α␈↓αn␈α
␈↓↓=␈α␈↓∧0␈α
␈↓βthen␈α␈↓∧1␈α␈↓βelse␈α
␈↓αn␈↓↓(␈↓αn␈↓↓-␈↓∧1␈↓↓)!.

␈↓↓␈↓        ␈↓↓␈↓We␈αmay␈αregard␈αthis␈αas␈αa␈αstatic␈αway␈αof␈αlooking␈αat␈αprogramming.␈α We␈αask␈αwhat␈αsimpler␈αcases
␈↓the␈α
general␈αcase␈α
of␈α
our␈αfunction␈α
depends␈α
on␈αrather␈α
 than␈α
 how␈α we␈α
 build␈α
up␈αthe␈α
desired␈α
state␈αof
␈↓the␈αcomputation.␈α
 One␈αoften␈α
is␈αled␈α
to␈αbelieve␈αthat␈α
 static␈α=␈α
bad␈α and␈α
  dynamic␈α=␈α
good,␈αbut␈α in␈α
 this
␈↓case,␈α the␈α
static␈αway␈αis␈α
often␈αbetter␈α
than␈αthe␈αdynamic␈α
way.␈α LISP␈α
offers␈α both,␈α but␈α
 since␈α it␈α is␈α
 less
␈↓usual,␈α
 we␈α
 shall␈α
concentrate␈α
on␈α
the␈α
static␈α
way␈α
for␈α
now.

␈↓        Compare␈α∂ the␈α∂ above␈α∂ recursive␈α∂ definition␈α∂with␈α∂the␈α∂following␈α∂obvious␈α∂Algol␈α⊂program␈α∂for
␈↓computing␈α
 ␈↓αn␈↓↓!:

␈↓↓␈↓        ␈↓↓␈↓βinteger procedure ␈↓αfactorial␈↓↓(␈↓αn␈↓↓); ␈↓βinteger ␈↓αs␈↓↓;
␈↓↓␈↓βbegin
␈↓β␈↓        ␈↓β␈↓αs ␈↓↓:= ␈↓∧1␈↓↓;
␈↓↓␈↓αloop␈↓↓:       ␈↓βif ␈↓αn ␈↓↓= ␈↓∧0 ␈↓βthen go to ␈↓αdone␈↓↓;
␈↓↓␈↓        ␈↓↓␈↓αs ␈↓↓:= ␈↓αn␈↓↓*␈↓αs␈↓↓;
␈↓↓␈↓        ␈↓↓␈↓αn ␈↓↓:= ␈↓αn␈↓↓-␈↓∧1␈↓↓;
␈↓↓␈↓        ␈↓↓␈↓βgo to ␈↓αloop␈↓↓;
␈↓␈↓ ¬sCHAPTER II␈↓ :19


␈↓↓␈↓αdone␈↓↓:       ␈↓αfactorial ␈↓↓:= ␈↓αs␈↓↓;
␈↓↓␈↓βend␈↓↓;

␈↓↓␈↓        ␈↓↓␈↓The␈α⊂ LISP␈α⊂program␈α∂is␈α⊂shorter␈α⊂and␈α∂clearer␈α⊂in␈α⊂this␈α∂particularly␈α⊂favorable␈α⊂ case.␈α∂  Actually,
␈↓when␈α we␈α discuss␈α
 the␈α  mechanism␈α  of␈α
recursion,␈αit␈αwill␈α
turn␈αout␈αthat␈α
the␈αLISP␈αprogram␈α
will␈αbe
␈↓inefficient␈α∪in␈α∩using␈α∪the␈α∩pushdown␈α∪mechanism␈α∪unnecessarily␈α∩and␈α∪should␈α∩be␈α∪ replaced␈α∪by␈α∩ the
␈↓following␈α∃ somewhat␈α∃ longer␈α∃ program␈α∃that␈α∃corresponds␈α∃to␈α∃the␈α∃above␈α∃Algol␈α∃program␈α∀rather
␈↓precisely:

␈↓        ␈↓αn␈↓↓!␈α←␈α␈↓αfact␈↓↓(␈↓αn␈↓↓,␈α␈↓αs␈↓↓),

␈↓↓␈↓where

␈↓        ␈↓αfact␈↓↓(␈↓αn␈↓↓,␈α␈↓αs␈↓↓)␈α
←␈α␈↓βif␈α
␈↓αn␈α␈↓↓=␈α
␈↓∧0␈α␈↓βthen␈α
␈↓αs␈α␈↓βelse␈α␈↓αfact␈↓↓(␈↓αn␈↓↓-␈↓∧1␈↓↓,␈α
␈↓αn␈↓↓*␈↓αs␈↓↓).

␈↓↓␈↓In␈α
 fact,␈α
 compilers␈α
should␈α
produce␈α
the␈α
same␈α
object␈α
code␈α
from␈α
the␈α
two␈α
programs.



␈↓2.  ␈↓βSimple␈α
list␈α
recursion.␈↓


␈↓        About␈α
the␈α
simplest␈α
form␈αof␈α
recursion␈α
in␈α
LISP␈αoccurs␈α
when␈α
 one␈α
of␈αthe␈α
arguments␈α
is␈α
a␈αlist,␈α
the
␈↓result␈αis␈αimmediate␈αwhen␈αthe␈αargument␈αis␈αnull,␈αand␈αotherwise␈αwe␈αneed␈αonly␈αknow␈αthe␈αresult␈αfor␈αthe
␈↓␈↓βd␈↓-part␈α
of␈α
that␈αargument.␈α
 Consider,␈α
for␈α
example,␈α ␈↓αu␈↓↓*␈↓αv␈↓,␈α
the␈α
concatenation␈α
of␈αthe␈α
lists␈α
 ␈↓αu␈↓␈α
 and␈α␈↓αv␈↓.␈α
 The
␈↓result␈α
is␈αimmediate␈α
for␈α the␈α
 case␈α  ␈↓βn␈α
␈↓αu␈↓␈α
  and␈αotherwise␈α
depends␈αon␈α
the␈αresult␈α
for␈α ␈↓βd␈α
␈↓αu␈↓.␈α
 Thus,␈αwe
␈↓have

␈↓        ␈↓αu␈↓↓*␈↓αv␈α
␈↓↓←␈α
␈↓βif␈α
n␈α␈↓αu␈α
␈↓βthen␈α
␈↓αv␈α
␈↓βelse␈α
a␈α␈↓αu␈α
␈↓↓.␈α
[␈↓βd␈α
␈↓αu␈α␈↓↓*␈α
␈↓αv␈↓↓].

␈↓↓␈↓On␈α∞the␈α∞other␈α∞hand,␈α∞if␈α∞we␈α∞had␈α∞tried␈α∞to␈α∞recur␈α∞on␈α∞ ␈↓αv␈↓␈α∞ rather␈α∞than␈α∞on␈α∞ ␈↓αu␈↓␈α∞we␈α∞would␈α∞not␈α∞have␈α∞been
␈↓successful.␈α The␈α
result␈αwould␈α
be␈αimmediate␈α
for␈α␈↓βn␈α␈↓αv␈↓,␈α
but␈α ␈↓αu␈↓↓*␈↓αv␈↓␈α
 cannot␈αbe␈α
constructed␈αin␈α
any␈αdirect
␈↓way␈α∞from␈α∞  ␈↓αu␈↓↓*␈↓βd␈α∞␈↓αv␈↓␈α∞without␈α∞ a␈α∞ function␈α∞ that␈α∞ puts␈α∞ an␈α∞ element␈α∞onto␈α∞the␈α∞end␈α∞of␈α∞a␈α∞list.␈α∂ (From␈α∞a
␈↓strictly␈α∂list␈α∂point␈α∂of␈α∂view,␈α∂such␈α∂ a␈α⊂ function␈α∂ would␈α∂ be␈α∂ as␈α∂elementary␈α∂ as␈α∂ ␈↓αcons␈↓␈α∂ which␈α⊂puts␈α∂an
␈↓element␈αonto␈αthe␈αfront␈αof␈αa␈αlist,␈αbut,␈αwhen␈αwe␈αconsider␈αthe␈αimplementation␈αof␈αlists␈αby␈αlist␈αstructures,
␈↓we␈α see␈α that␈α the␈α function␈αis␈αnot␈αso␈αelementary.␈α This␈αhas␈αled␈αsome␈αpeople␈αto␈αconstruct␈αsystems␈αin
␈↓which␈αlists␈αare␈α bi-directional,␈α but,␈αin␈α the␈α main,␈α this␈αhas␈αturned␈αout␈αto␈αbe␈αa␈αbad␈αidea).␈α Anyway,
␈↓it␈α
is␈α
usually␈α
easier␈α
to␈α
recur␈α
on␈α
one␈α
argument␈α
of␈α
a␈α
function␈α
than␈α
 to␈α
 recur␈α
on␈α
the␈α
other.

␈↓        It␈α∞ is␈α
 often␈α∞necessary␈α∞to␈α
represent␈α∞a␈α
correspondence␈α∞between␈α∞the␈α
elements␈α∞of␈α
a␈α∞small␈α∞set␈α
of
␈↓atoms␈α
and␈α∞certain␈α
 S-expressions␈α
 by␈α∞ a␈α
list␈α
structure.␈α∞ This␈α
is␈α
conveniently␈α∞done␈α
by␈α
means␈α∞of␈α
an
␈↓association␈αlist␈αwhich␈αis␈αa␈αlist␈αof␈αpairs,␈αeach␈αpair␈αconsisting␈αof␈α an␈α atom␈α and␈αthe␈αcorresponding␈αS-
␈↓expression.␈α
Thus␈α
the␈α
association␈α
list

␈↓        ␈↓∧((X␈α.␈α(PLUS␈αA␈αB))␈α(Y␈α.␈αC)␈α(Z␈α.␈α(TIMES␈αU␈αV)),

␈↓∧␈↓which␈α
would␈α
print␈α
as
␈↓␈↓ ¬sCHAPTER II␈↓ :20


␈↓        ␈↓∧((X␈αPLUS␈αA␈αB))␈α(Y␈α.␈αC)␈α(Z␈αTIMES␈αU␈αV)),

␈↓∧␈↓pairs␈α
 ␈↓∧X␈↓␈α∞ with␈α
 ␈↓∧(PLUS␈α
A␈α∞B),␈α
 Y␈↓␈α∞ with␈α
 ␈↓∧C␈↓,␈α
etc.␈α∞We␈α
need␈α∞a␈α
 function␈α
 to␈α∞tell␈α
 whether␈α∞ anything␈α
 is
␈↓associated␈α
 with␈α
 the␈α
 atom␈α
  ␈↓αx␈↓␈α
  in␈α
the␈α
association␈α
list␈α
 ␈↓αa␈↓,␈α
and,␈α
if␈α
so,␈α
to␈α
tell␈α
us␈α
what.␈α
We␈α
have

␈↓        ␈↓αassoc␈↓↓[␈↓αx, a␈↓↓] ← ␈↓βif n ␈↓αa ␈↓βthen ␈↓∧NIL ␈↓βelse if ␈↓αx ␈↓βeq aa ␈↓αa ␈↓βthen a ␈↓αa
␈↓α␈↓                ␈↓α␈↓βelse ␈↓αassoc␈↓↓[␈↓αx, ␈↓βd ␈↓αa␈↓↓].

␈↓↓␈↓Its␈α
value␈α
is␈α
  ␈↓∧NIL␈↓␈α
  if␈α
 nothing␈α
 is␈α
 associated␈α
 with␈α
  ␈↓αx␈↓␈α
  and␈α
 the␈α
association␈α
pair␈α∞otherwise.␈α
 E.g.
␈↓␈↓αassoc␈↓↓[␈↓∧X,␈α((X.W)␈α(Y.V))␈↓↓]␈α=␈α␈↓∧(X.W)␈↓.

␈↓        It␈α
 commonly␈α
happens␈α
that␈α
a␈α
function␈α
has␈α
no␈α
simple␈α
recursion,␈α
but␈α
there␈α
is␈α
a␈αsimple␈α
recursion
␈↓for␈α⊃a␈α∩function␈α⊃with␈α⊃one␈α∩more␈α⊃variable␈α⊃that␈α∩ reduces␈α⊃ to␈α⊃the␈α∩desired␈α⊃function␈α⊃when␈α∩the␈α⊃extra
␈↓variable␈α
is␈α
set␈α
to␈α
␈↓∧NIL␈↓.␈α
 Thus

␈↓        ␈↓αreverse␈↓↓[␈↓αu␈↓↓]␈α←␈α␈↓αrev1␈↓↓[␈↓αx,␈α
␈↓∧NIL␈↓↓],

␈↓↓␈↓where

␈↓        ␈↓αrev1␈↓↓[␈↓αu,␈α
v␈↓↓]␈α
←␈α
␈↓βif␈α
n␈α
␈↓αu␈α␈↓βthen␈α
␈↓αv␈α
␈↓βelse␈α
␈↓αrev1␈↓↓[␈↓βd␈α
␈↓αu,␈α
␈↓βa␈α
␈↓αu␈α.␈α
v␈↓↓].

␈↓↓␈↓αreverse␈↓␈αhas␈αa␈α
direct␈αrecursive␈αdefinition␈α
as␈αdiscovered␈αby␈αS.␈α
Ness,␈αbut␈αno-one␈α
would␈αwant␈αto␈αuse␈α
the
␈↓following␈α∞in␈α∞actual␈α∞computation␈α∞ nor␈α∞does␈α∞ it␈α∞generate␈α∞much␈α∞understanding,␈α∞only␈α∞appreciation␈α∞of
␈↓Mr.␈α
Ness's␈α
ingenuity:

␈↓        ␈↓αreverse␈↓↓[␈↓αu␈↓↓] ← ␈↓βif n ␈↓αu ␈↓↓∨ ␈↓βn d ␈↓αu ␈↓βthen ␈↓αu ␈↓βelse
␈↓β␈↓                ␈↓βa ␈↓αreverse␈↓↓[␈↓βd ␈↓αu␈↓↓] . ␈↓αreverse␈↓↓[␈↓βa ␈↓αu. reverse␈↓↓[␈↓βd ␈↓αreverse␈↓↓[␈↓βd ␈↓αu␈↓↓]]].



␈↓                              Exercises

␈↓        1.␈αUsing␈αthe␈αfunction␈α ␈↓αmember␈↓↓[␈↓αx,␈αu␈↓↓]␈↓␈α defined␈αin␈αChapter␈αI␈αwhich␈α may␈αalso␈αbe␈αwritten␈α ␈↓αx␈α␈↓↓ε␈α␈↓αu␈↓,
␈↓write␈αfunction␈αdefinitions␈αfor␈αthe␈αunion␈α ␈↓αu␈α␈↓↓∪␈α␈↓αv␈↓␈α of␈αlists␈α ␈↓αu␈↓␈α and␈α ␈↓αv␈↓,␈αthe␈αintersection␈α ␈↓αu␈α␈↓↓∩␈α␈↓αv␈↓,␈α and␈α the
␈↓set␈α
 difference␈α
  ␈↓αu␈↓↓-␈↓αv␈↓.␈α
   What␈α
 is␈α
 wanted␈α
 should␈α
 be␈α
clear␈α
from␈α
the␈α
examples:

␈↓        ␈↓∧(A␈αB␈αC)␈α␈↓↓∪␈↓∧␈α(B␈αC␈αD)␈α␈↓↓=␈↓∧␈α(A␈αB␈αC␈αD),

␈↓∧␈↓        ␈↓∧(A␈αB␈αC)␈α␈↓↓∩␈↓∧␈α(B␈αC␈αD)␈α␈↓↓=␈↓∧␈α(B␈αC),

␈↓∧␈↓and

␈↓        ␈↓∧(A␈αB␈αC)␈α␈↓↓-␈↓∧␈α(B␈αC␈αD)␈α␈↓↓=␈↓∧␈α(A).

␈↓∧␈↓Pay␈α∂ attention␈α∂ to␈α∂getting␈α∂correct␈α∂the␈α∂trivial␈α∂cases␈α∂in␈α∂which␈α∂some␈α∂of␈α∂the␈α∂arguments␈α∂are␈α⊂␈↓∧NIL␈↓.␈α∂ In
␈↓general,␈α
it␈α
 is␈α
 important␈α
 to␈α
 understand␈α
clearly␈α
the␈α
trivial␈α
cases␈α
of␈α
functions.
␈↓␈↓ ¬sCHAPTER II␈↓ :21


␈↓        2.␈α⊂ Suppose␈α⊂  ␈↓αx␈↓␈α⊂  takes␈α⊃ numbers␈α⊂ as␈α⊂ values␈α⊂and␈α⊂ ␈↓αu␈↓␈α⊃ takes␈α⊂as␈α⊂values␈α⊂lists␈α⊂of␈α⊃numbers␈α⊂in
␈↓ascending␈αorder,␈α
e.g.␈α ␈↓∧(2␈α
4␈α7)␈↓.␈α
  Write␈α a␈α
function␈α  ␈↓αmerge␈↓↓[␈↓αx,␈α
u␈↓↓]␈↓␈α  whose␈α
 value␈α is␈α
obtained␈αfrom␈α
that
␈↓of␈α
 ␈↓αu␈↓␈α
 by␈α
putting␈α
    ␈↓αx␈↓␈α∞    in␈α
    ␈↓αu␈↓␈α
    in␈α
   its␈α
   proper␈α
   place.␈α∞    Thus␈α
␈↓αmerge␈↓↓[␈↓∧3,␈α
(2␈α
4)␈↓↓]␈α
=␈α
␈↓∧(2␈α∞3␈α
4)␈↓,
␈↓and␈α ␈↓αmerge␈↓↓[␈↓∧3,␈α(2␈α3)␈↓↓]␈α=␈α␈↓∧(2␈α3␈α
3)␈↓.

␈↓        3.␈α∂ Write␈α∞ functions␈α∂ giving␈α∞the␈α∂union,␈α∞intersection,␈α∂and␈α∞set␈α∂difference␈α∞of␈α∂ordered␈α∂lists;␈α∞the
␈↓result␈α
is␈α
wanted␈α
as␈α
an␈α
ordered␈α
list.

␈↓        Note␈α⊂that␈α∂computing␈α⊂these␈α∂functions␈α⊂of␈α⊂unordered␈α∂lists␈α⊂ takes␈α∂a␈α⊂ number␈α⊂ of␈α∂comparisons
␈↓proportional␈αto␈αthe␈αsquare␈α
of␈αthe␈αnumber␈αof␈α
elements␈αof␈αa␈αtypical␈α
list,␈αwhile␈αfor␈αordered␈α
lists,␈α the
␈↓number␈α
 of␈α
comparisons␈α
is␈α
proportional␈α
to␈α
the␈α
number␈α
of␈α
elements.

␈↓        4.␈α
 Using␈α
  ␈↓αmerge␈↓,␈α∞write␈α
a␈α
function␈α∞ ␈↓αsort␈↓␈α
 that␈α
transforms␈α
an␈α∞unordered␈α
list␈α
into␈α∞an␈α
ordered
␈↓list.

␈↓        5.␈α∃Write␈α⊗a␈α∃function␈α∃ ␈↓αgoodsort␈↓␈α⊗ that␈α∃ sorts␈α⊗ a␈α∃ list␈α∃ using␈α⊗ a␈α∃number␈α⊗ of␈α∃ comparisons
␈↓proportional␈α
 to␈α
  ␈↓αn␈α
log␈α
n␈↓,␈α
where␈α
 ␈↓αn␈↓␈α
 is␈α
the␈α
length␈α
of␈α
the␈α
list␈α
to␈α
be␈α
sorted.



␈↓3.  ␈↓βSimple␈α
S-expression␈α
recursion.␈↓


␈↓        In␈αanother␈αclass␈αof␈αproblems,␈αthe␈αvalue␈αof␈α the␈α function␈α is␈αimmediate␈α for␈α
 atomic␈αsymbols,
␈↓and␈α∂for␈α∞non␈α∂atoms␈α∞depends␈α∂only␈α∞on␈α∂the␈α∞values␈α∂for␈α∞ the␈α∂a-part␈α∞and␈α∂the␈α∞d-part␈α∂of␈α∂the␈α∞argument.
␈↓Thus␈α
  ␈↓αsubst␈↓␈α
was␈α
defined␈α
by

␈↓        ␈↓αsubst␈↓↓[␈↓αx, y, z␈↓↓] ← ␈↓βif at ␈↓αz ␈↓βthen ␈↓↓[␈↓βif ␈↓αz ␈↓βeq ␈↓αy ␈↓βthen ␈↓αx ␈↓βelse ␈↓αz␈↓↓]
␈↓↓                        ␈↓βelse ␈↓αsubst␈↓↓[␈↓αx, y, ␈↓βa ␈↓αz␈↓↓] . ␈↓αsubst␈↓↓[␈↓αx , y , ␈↓βd ␈↓αz␈↓↓].

␈↓↓␈↓        ␈↓↓␈↓Two␈α⊃other␈α∩examples␈α⊃are␈α⊃ ␈↓αequal␈↓␈α∩ which␈α⊃gives␈α⊃ the␈α∩ equality␈α⊃ of␈α⊃S-expressions␈α∩ and␈α⊃  ␈↓αflat␈↓
␈↓which␈α
spreads␈α
an␈α
S-expression␈α
into␈α
a␈α
list␈α
of␈α
atoms:␈α
 They␈α
are␈α
defined␈α
by

␈↓        ␈↓αx␈↓↓=␈↓αy␈α
␈↓↓←␈α
␈↓αx␈α␈↓βeq␈α
␈↓αy␈α
␈↓↓∨␈α[¬␈↓βat␈α
␈↓αx␈α
␈↓↓∧␈α¬␈↓βat␈α
␈↓αy␈α
␈↓↓∧␈α␈↓βa␈α
␈↓αx␈α
␈↓↓=␈α␈↓βa␈α
␈↓αy␈α
␈↓↓∧␈α␈↓βd␈α
␈↓αx␈α
␈↓↓=␈α␈↓βd␈α
␈↓αy␈↓↓],

␈↓↓␈↓and

␈↓        ␈↓αflat␈↓↓[␈↓αx␈↓↓]␈α←␈α␈↓αflata␈↓↓[␈↓αx,␈α
␈↓∧NIL␈↓↓]

␈↓↓␈↓where

␈↓        ␈↓αflata␈↓↓[␈↓αx,␈α
u␈↓↓]␈α
←␈α
␈↓βif␈α
at␈α
␈↓αx␈α␈↓βthen␈α
␈↓αx.y␈α
␈↓βelse␈α
␈↓αflata␈↓↓[␈↓βa␈α
␈↓αx,␈α
flata␈↓↓[␈↓βd␈α␈↓αx,␈α
y␈↓↓]].

␈↓↓␈↓                              EXERCISES

␈↓        1.␈αWrite␈α
a␈αpredicate␈αto␈α
tell␈αwhether␈αa␈α
given␈αatom␈α
occurs␈αin␈αa␈α
given␈αS-expression,␈αe.g.␈α
 ␈↓αoccur␈↓↓[␈↓∧B,
␈↓∧((A.B).C)␈↓↓]␈α=␈α␈↓∧T␈↓.
␈↓␈↓ ¬sCHAPTER II␈↓ :22


␈↓        2.␈α
Write␈α
a␈α
predicate␈α
to␈α
tell␈α
how␈α
 many␈α
 times␈α
 a␈α
 given␈α
 atom␈α
occurs␈α
in␈α
an␈α
S-expression.

␈↓        3.␈α∞ Write␈α∞ a␈α∞ function␈α∞to␈α∞make␈α∞a␈α∂list␈α∞without␈α∞duplications␈α∞of␈α∞the␈α∞atoms␈α∞occurring␈α∞in␈α∂an␈α∞S-
␈↓expression.

␈↓        4.␈αWrite␈αa␈α
function␈αto␈αmake␈αa␈α
list␈αof␈αall␈α
 atoms␈α that␈α occur␈αmore␈α
  than␈α  once␈α  in␈α  a␈α
 given
␈↓S-expression␈α
 paired␈α
 with␈α
 their␈α
multiplicities.

␈↓        5.␈αWrite␈αa␈α
predicate␈αto␈αtell␈α
whether␈αan␈αS-expression␈α
has␈αmore␈αthan␈α
one␈αoccurrence␈αof␈αa␈α
given
␈↓S-expression␈α
as␈α
a␈α
sub-expression.



␈↓4.  ␈↓βOther␈α
structural␈α
recursions.␈↓


␈↓        When␈α↔lists␈α_are␈α↔used␈α_to␈α↔represent␈α_algebraic␈α↔expressions,␈α_functions␈α↔of␈α_these␈α↔algebraic
␈↓expressions␈α⊗often␈α⊗have␈α⊗a␈α⊗recursive␈α⊗form␈α⊗closely␈α⊗related␈α⊗to␈α⊗the␈α⊗inductive␈α⊗definition␈α⊗of␈α∃the
␈↓expressions.␈α⊂ Suppose,␈α⊂for␈α⊂example,␈α⊂that␈α⊂sums␈α⊂and␈α⊂products␈α⊂are␈α⊂represented␈α⊂respectively␈α⊂by␈α∂the
␈↓forms␈α ␈↓∧(PLUS␈α
X␈αY)␈↓␈α
 and␈α ␈↓∧(TIMES␈α
X␈αY)␈↓␈α
 and␈αthat␈α
the␈αvalues␈α
of␈αvariables␈α
are␈αgiven␈α
on␈αan␈αa-list.␈α
 We
␈↓can␈α
write␈α
a␈α
recursive␈α
formula␈α
for␈α
the␈α
value␈α
of␈α
an␈α
expression␈α
as␈α
follows:

␈↓        ␈↓αvalue␈↓↓[␈↓αe, a␈↓↓] ← ␈↓βif at ␈↓αe ␈↓βthen d ␈↓αassoc␈↓↓[␈↓αe, a␈↓↓]
␈↓↓␈↓                ␈↓↓␈↓βelse if a ␈↓αe ␈↓βeq ␈↓∧PLUS ␈↓βthen ␈↓αvalue␈↓↓[␈↓βad ␈↓αe, a␈↓↓] + ␈↓αvalue␈↓↓[␈↓βadd ␈↓αe, a␈↓↓]
␈↓↓␈↓                ␈↓↓␈↓βelse if a ␈↓αe ␈↓βeq ␈↓∧TIMES ␈↓βthen ␈↓αvalue␈↓↓[␈↓βad ␈↓αe, a␈↓↓] * ␈↓αvalue␈↓↓[␈↓βadd ␈↓αe, a␈↓↓].

␈↓↓␈↓On␈αthe␈αother␈αhand,␈αsuppose␈αthat␈αsums␈αand␈αproducts␈αare␈αnot␈αrestricted␈αto␈αhave␈αjust␈αtwo␈αarguments;
␈↓then␈α
we␈α
must␈α
use␈α
auxiliary␈α
functions␈α
to␈α
define␈α
the␈α
value␈α
of␈α
an␈α
expression,␈α
as␈α
follows:

␈↓        ␈↓αvalue␈↓↓[␈↓αe, a␈↓↓] ← ␈↓βif at ␈↓αe ␈↓βthen d ␈↓αassoc␈↓↓[␈↓αe, a␈↓↓]
␈↓↓                        ␈↓βelse if a ␈↓αe ␈↓βeq ␈↓∧PLUS ␈↓βthen ␈↓αvplus␈↓↓[␈↓βd ␈↓αe, a␈↓↓]
␈↓↓                        ␈↓βelse if a ␈↓αe ␈↓βeq ␈↓∧TIMES ␈↓βthen ␈↓αvtimes␈↓↓[␈↓βd ␈↓αe, a␈↓↓].

␈↓↓␈↓where

␈↓        ␈↓αvplus␈↓↓[␈↓αu, a␈↓↓] ← ␈↓βif n ␈↓αu ␈↓βthen ␈↓∧0 ␈↓βelse ␈↓αvalue␈↓↓[␈↓βa ␈↓αu, a␈↓↓] + ␈↓αvplus␈↓↓[␈↓βd ␈↓αu, a␈↓↓],

␈↓↓␈↓and

␈↓        ␈↓αvtimes␈↓↓[␈↓αu, a␈↓↓] ← ␈↓βif n ␈↓αu ␈↓βthen ␈↓∧1 ␈↓βelse ␈↓αvalue␈↓↓[␈↓βa ␈↓αu, a␈↓↓] * ␈↓αvtimes␈↓↓[␈↓βd ␈↓αu, a␈↓↓].

␈↓↓␈↓In␈α
both␈α
cases,␈αthe␈α
recursion␈α
form␈αis␈α
related␈α
to␈αthe␈α
structure␈α
of␈αthe␈α
algebraic␈α
expressions␈αmore␈α
closely
␈↓than␈α
to␈α
the␈α
structure␈α
of␈α
S-expressions␈α
or␈α
lists.
␈↓␈↓ ¬sCHAPTER II␈↓ :23


␈↓5.  ␈↓βTree␈α
search.␈↓


␈↓      We␈α
begin␈α
with␈α
a␈α
general␈α
depth␈α
first␈α
tree␈α
search␈α
function.␈α
 It␈α
can␈α
be␈α
used␈α
to␈α
search␈α
specific␈α
trees
␈↓of␈αpossibilities␈αby␈αdefining␈αthree␈α
auxiliary␈αfunctions␈αin␈αa␈αway␈α
that␈αdepends␈αon␈αthe␈αapplication.␈α
 We
␈↓have

␈↓        ␈↓αsearch p ␈↓↓← ␈↓βif ␈↓αlose p ␈↓βthen ␈↓LOSE
␈↓                         ␈↓βelse if ␈↓αter p ␈↓βthen ␈↓αp ␈↓βelse ␈↓αsearchlis␈↓↓[␈↓αsuccessors p␈↓↓]␈↓

␈↓where


␈↓      ␈↓αsearchlis␈α
u␈α
␈↓↓←␈α
␈↓β␈α
if␈α
n␈α
␈↓αu␈α
␈↓βthen␈α
␈↓LOSE␈α
␈↓βelse␈α␈↓α␈↓↓{␈↓αsearch␈α
␈↓βa␈α
 ␈↓αu␈↓↓}[␈↓αλx␈↓↓:␈↓α␈α
␈↓βif␈α
␈↓αx␈α
␈↓↓=␈α
␈↓LOSE␈α
␈↓βthen␈α
␈↓αsearchlis␈α
␈↓βd␈α
␈↓αu␈α␈↓βelse␈α
␈↓αx␈↓↓]␈↓α.␈↓


␈↓In␈α
the␈α
applications,␈α
we␈α
 start␈α
with␈α
a␈α
position␈α
␈↓αp␈↓¬0␈↓,␈α and␈α
we␈α
are␈α
looking␈α
for␈α
 a␈α
win␈α
in␈α
the␈αsuccessor␈α
tree
␈↓of␈α␈↓αp␈↓¬0␈↓.␈α Certain␈αpositions␈αlose␈αand␈α there␈αis␈α no␈αpoint␈αlooking␈α at␈αtheir␈α successors.␈α This␈α
is␈αdecided
␈↓by␈α
the␈α
predicate␈α
␈↓αlose␈↓.␈α
A␈α
position␈α
 is␈α
a␈α
win␈α
if␈α
it␈α
 doesn't␈α
 lose␈α
 and␈α
 it␈α
 satisfies␈α
 the␈α∞ predicate␈α
␈↓αter␈↓.
␈↓The␈αsuccessors␈αof␈αa␈αposition␈α is␈αgiven␈αby␈α
the␈α function␈α␈↓αsuccessors␈↓,␈αand␈α the␈α value␈α of␈α␈↓αsearch␈α
 p␈↓␈α is
␈↓the␈α⊂ winning␈α⊂position.␈α∂   No␈α⊂non-losing␈α⊂position␈α∂should␈α⊂have␈α⊂the␈α∂ name␈α⊂LOSE␈α⊂or␈α⊂the␈α∂function
␈↓won't␈α
work␈α
properly.

␈↓        Our␈α⊂first␈α⊂example␈α⊂is␈α⊂ finding␈α⊂a␈α⊂path␈α⊂from␈α⊂an␈α⊂ initial␈α⊂node␈α⊂to␈α⊂a␈α⊂final␈α⊂node␈α⊂ in␈α⊂a␈α⊂graph
␈↓represented␈α
by␈α
a␈α
list␈α
structure␈α
as␈α
described␈α
in␈α
chapter␈α
I.␈α
  A␈α
position␈α
is␈α
a␈α
path␈α
 starting␈α
from␈α
the
␈↓initial␈α
 node␈αand␈α
 continuing␈α
to␈α some␈α
intermediate␈α node␈α
and␈α
 is␈αrepresented␈α
 by␈α
a␈αlist␈α
 of␈αits␈α
nodes
␈↓in␈α
reverse␈α
order.␈α
  The␈α
three␈α
 functions␈α
for␈α
this␈α
application␈α
are

␈↓        ␈↓αlose p ␈↓↓← ␈↓βa ␈↓αp ␈↓↓ε ␈↓βd ␈↓αp,

␈↓α␈↓        ␈↓αter p ␈↓↓← [␈↓βa ␈↓αp ␈↓↓=␈↓α final␈↓↓]␈↓α, ␈↓

␈↓and

␈↓        ␈↓αsuccessors p ␈↓↓←␈↓α mapcar␈↓↓[␈↓βd ␈↓αassoc␈↓↓[␈↓βa ␈↓αp, graph␈↓↓]␈↓α, λx␈↓↓:␈↓α x.p␈↓↓]␈↓α.␈↓


␈↓      Another␈αexample␈α
is␈αthe␈α
so-called␈α␈↓αInstant␈α
Insanity␈↓␈αpuzzle.␈α
 There␈αare␈α
four␈αcubical␈α
blocks,␈αand
␈↓each␈αface␈αof␈α
each␈αblock␈αis␈α
colored␈αwith␈αone␈α
of␈αfour␈αcolors.␈α The␈α
object␈αof␈αthe␈α
puzzle␈αis␈αto␈α
build␈αa
␈↓tower␈αof␈αall␈αfour␈αblocks␈αsuch␈αthat␈αeach␈αvertical␈αface␈αof␈αthe␈αtower␈αinvolves␈αall␈αfour␈αcolors.␈α In␈αorder
␈↓to␈α∞use␈α∂the␈α∞above␈α∂defined␈α∞function␈α∂␈↓αsearch␈↓␈α∞for␈α∂this␈α∞purpose,␈α∂we␈α∞must␈α∂define␈α∞the␈α∂representation␈α∞of
␈↓positions␈αand␈αgive␈αthe␈αfunctions␈α␈↓αlose,␈αter,␈α␈↓and␈α␈↓αsuccessors␈↓.␈α A␈αposition␈αis␈αrepresented␈αby␈αa␈αlist␈αof␈αlists
␈↓¬␈α⊂one␈α⊂for␈α⊂each␈α∂face␈α⊂of␈α⊂the␈α⊂tower.␈α∂ Each␈α⊂sublist␈α⊂is␈α⊂the␈α∂list␈α⊂of␈α⊂colors␈α⊂of␈α∂the␈α⊂faces␈α⊂of␈α⊂the␈α∂blocks
␈↓showing␈αin␈α
that␈αface.␈α
 We␈αshall␈αassume␈α
that␈αthe␈α
blocks␈αare␈αdescribed␈α
in␈αthe␈α
following␈αlongwinded
␈↓but␈αconvenient␈αway.␈α (We'll␈αtake␈αup␈αprecomputing␈αthis␈αdescription␈αlater.)␈α For␈αeach␈αblock␈αthere␈αis␈αa
␈↓list␈α∞of␈α
the␈α∞24␈α∞orientations␈α
of␈α∞the␈α
block␈α∞where␈α∞each␈α
orientation␈α∞is␈α
described␈α∞as␈α∞a␈α
list␈α∞of␈α∞the␈α
colors
␈↓around␈αthe␈αvertical␈αfaces␈αof␈αthe␈αblock␈αwhen␈αit␈αis␈αin␈αthat␈αorientation.␈α Thus␈αthe␈αpuzzle␈αis␈αdescribed
␈↓by␈α
a␈α
list␈α
of␈α
lists␈α
of␈α
lists␈α
which␈α
we␈α
shall␈α
call␈α
␈↓αpuzz␈↓.
␈↓␈↓ ¬sCHAPTER II␈↓ :24


␈↓        We now have

␈↓        ␈↓αp␈↓¬0␈↓ ␈↓↓=␈↓ (NIL NIL NIL NIL),

␈↓        ␈↓αlose p ␈↓↓←␈↓α orlis␈↓↓[␈↓αp, λu␈↓↓:␈↓α ␈↓βa ␈↓αu ␈↓↓ε ␈↓βd ␈↓αu␈↓↓]␈↓α,

␈↓α␈↓        ␈↓αter p ␈↓↓← [␈↓αlength ␈↓βa ␈↓αp ␈↓↓=␈↓α 4␈↓↓]␈↓,

␈↓and


␈↓      ␈↓αsuccessors␈α
p␈α
␈↓↓←␈↓α␈α
mapcar␈↓↓[␈↓βa␈α
␈↓αnth␈↓↓[␈↓αpuzz,␈α
1␈α
+␈α
length␈α
␈↓βa␈α
␈↓αp␈↓↓]␈↓α␈α
,␈α
λx␈↓↓:␈↓α␈α
mapcar2␈↓↓[␈↓αp,␈α
x,␈α
λyz␈↓↓:␈↓α␈α
z.y␈↓↓]]␈↓α,␈α
␈↓

␈↓where


␈↓      ␈↓αmapcar2␈↓↓[␈↓αu,␈α
v,␈α
f␈↓↓]␈α
←␈α
␈↓αif␈α
n␈α
u␈α
␈↓βthen␈α
␈↓NIL␈α␈↓βelse␈α
f␈↓↓[␈↓βa␈α
␈↓αu,␈α
␈↓βa␈α
␈↓αv␈↓↓]␈↓α␈α
.␈α
mapcar2␈↓↓[␈↓βd␈α
␈↓αu,␈α
␈↓βd␈α␈↓αv,␈α
f␈↓↓]␈↓α.␈↓


␈↓      Getting␈α
the␈αinitial␈α
position␈α
in␈αthe␈α
desired␈αform␈α
is␈α
as␈αcomplicated␈α
a␈αcomputation␈α
as␈α
the␈αactual
␈↓tree␈α∞search.␈α∞ It␈α∞can␈α∞be␈α∞conveniently␈α∞done␈α∞by␈α∞a␈α∞sequence␈α∞of␈α∞assignment␈α∞statements␈α∞starting␈α∞with␈α
a
␈↓description␈α
of␈α
the␈α
blocks:

␈↓        ␈↓αpuzz1 ␈↓↓← ␈↓((G B B W R G) (G G B G W R) (G W W R B R) (G G R B W W)).


␈↓Here␈αeach␈αblock␈αis␈αrepresented␈αby␈αa␈αlist␈αof␈αthe␈αcolors␈αof␈αthe␈αfaces␈αstarting␈αwith␈αthe␈αtop␈αface,␈αgoing
␈↓around␈α
the␈α
sides␈α
in␈α
a␈α
clockwise␈α
direction␈α
and␈α
finishing␈α
with␈α
the␈α
bottom␈α
face.

␈↓        We␈αneed␈αto␈αgo␈αfrom␈αthis␈αdescription␈αof␈αthe␈αblocks␈αto␈αa␈αlist␈αof␈αthe␈αpossible␈αcycles␈αof␈αcolors␈αon
␈↓the␈α
vertical␈α
faces␈α
for␈αthe␈α
24␈α
orientations␈α
of␈αthe␈α
block.␈α
 This␈α
not␈α
easy,␈αbecause␈α
the␈α
order␈α
in␈αwhich␈α
we
␈↓have␈α
given␈α
the␈α
colors␈α
is␈α
not␈α
invariant␈α
under␈α
rotations␈α
of␈α
the␈α
block.␈α
 An␈α
easy␈α
way␈α
out␈α
is␈α
to␈α
start␈α
with
␈↓a␈α⊂block␈α⊂whose␈α⊂faces␈α⊂are␈α⊃assigned␈α⊂the␈α⊂numbers␈α⊂1␈α⊂thru␈α⊃6␈α⊂starting␈α⊂with␈α⊂the␈α⊂top,␈α⊃going␈α⊂clockwise
␈↓around␈αthe␈αsides␈αand␈α
finishing␈αwith␈αthe␈αbottom.␈α
 We␈αwrite␈αdown␈αone␈α
cycle␈αof␈αside␈αcolors␈α
for␈αeach
␈↓choice␈αof␈αthe␈α
face␈αput␈αon␈α
top␈αand␈αget␈αthe␈α
list␈αof␈αall␈α
24␈αcycles␈αby␈α
appending␈αthe␈αresults␈αof␈α
generating
␈↓the␈α
cyclic␈α
permutations␈α
of␈α
the␈α
cycles.␈α
 All␈α
this␈α
is␈α
accomplished␈α
by␈α
the␈α
assignment



␈↓      ␈↓αpuzz2␈α
␈↓↓←␈↓α␈α
cycles␈↓↓[␈↓(2␈α
3␈α
4␈α
5)␈↓↓]␈↓␈↓↓*␈↓␈↓αcycles␈↓↓[␈↓α(␈↓(2␈α
5␈α
4␈α
3)␈↓↓]␈↓␈↓↓*␈↓␈α
␈↓αcycles␈↓↓[␈↓α(1␈α
2␈α
6␈α
4)␈↓↓]␈↓α
␈↓α                  ␈↓↓*␈↓αcycles␈↓↓[␈↓α(1 4 6 2)␈↓↓]␈↓α␈↓↓*␈↓αcycles␈↓↓[␈↓α(1 3 6 5)␈↓↓]␈↓α␈↓↓*␈↓αcycles␈↓↓[␈↓α(1 5 6 3)␈↓↓]␈↓α, ␈↓

␈↓where the function ␈↓αcycles␈↓ is defined by

␈↓        ␈↓αcycles u ␈↓↓←␈↓α maplist␈↓↓[␈↓αu, λx␈↓↓:␈↓α x␈↓↓*␈↓αupto␈↓↓[␈↓αu, x␈↓↓]]␈↓

␈↓with the auxiliary function
␈↓␈↓ ¬sCHAPTER II␈↓ :25


␈↓      ␈↓αupto␈↓↓[␈↓αu,␈α
x␈↓↓]␈α
←␈α
␈↓βif␈α
␈↓αx␈α
␈↓βeq␈α
␈↓αu␈α␈↓βthen␈α
␈↓NIL␈α
␈↓βelse␈α
a␈α
 ␈↓αu␈α
.␈α
upto␈↓↓[␈↓βd␈α␈↓αu,␈α
x␈↓↓]␈↓α.␈↓


␈↓Next␈α
we␈α
create␈α
for␈α
each␈αblock␈α
a␈α
list␈α
of␈α
substitutions␈α
expressing␈αthe␈α
colors␈α
of␈α
the␈α
six␈αnumbered␈α
faces.
␈↓We␈α
have

␈↓        ␈↓αpuzz3 ␈↓↓←␈↓α mapcar␈↓↓[␈↓αpuzz1, λx␈↓↓:␈↓α prup␈↓↓[␈↓(1 2 3 4 5 6), ␈↓αx␈↓↓]]␈↓α, ␈↓


␈↓and␈α
we␈α
use␈α
these␈α
substitutions␈α
to␈α
get␈α
for␈α
each␈α
block␈α
the␈α
list␈α
of␈α
24␈α
orientations␈α
of␈α
the␈α
block.␈α
Thus

␈↓        ␈↓αpuzz4 ␈↓↓←␈↓α mapcar␈↓↓[␈↓αpuzz3, λs␈↓↓:␈↓α sublis␈↓↓[␈↓αs, puzz3␈↓↓]]␈↓α.


␈↓αpuzz4␈↓␈α
has␈αall␈α
24␈α
orientations␈αof␈α
the␈α
first␈αblock␈α
while␈αfor␈α
symmetry␈α
reasons␈αwe␈α
need␈α
only␈αconsider
␈↓three␈α
as␈α
distinct,␈α
say␈α
the␈α
first,␈α
ninth,␈α
and␈α
seventeen.␈α
 So␈α
we␈α
finally␈α
get


␈↓      ␈↓αpuzz␈α
␈↓↓←␈↓α␈α
(␈↓βa␈α
␈↓αnth␈↓↓[␈↓βa␈α
␈↓αpuzz4,␈α
1␈↓↓]␈α
␈↓βa␈α
␈↓αnth␈↓↓[␈↓βa␈α
␈↓αpuzz4,␈α
9␈↓↓]␈↓α␈α
␈↓βa␈α
␈↓αnth␈↓↓[␈↓βa␈α
␈↓αpuzz4,␈α
17␈↓↓]␈↓α)␈α
.␈α␈↓βd␈α
␈↓αpuzz4.␈↓


␈↓The␈α
program␈α
when␈α
compiled␈α
runs␈α
about␈α
11␈α
seconds␈α
on␈α
the␈α
PDP-10.

␈↓        A␈α
more␈α∞sophisticated␈α
representation␈α∞of␈α
face␈α∞cycles␈α
and␈α
partial␈α∞towers␈α
makes␈α∞a␈α
factor␈α∞of␈α
ten
␈↓speedup␈α
without␈αchanging␈α
the␈α
basic␈αsearch␈α
algorithm.␈α
 A␈αface␈α
cycle␈αis␈α
represented␈α
by␈α16␈α
bits␈α
in␈αa
␈↓word␈αfour␈αfor␈αeach␈αface␈αa␈α
particular␈αone␈αof␈αwhich␈αbeing␈αturned␈αon␈α
tells␈αus␈αthe␈αcolor␈αof␈αthe␈αface.␈α
 If
␈↓we␈α␈↓βor␈↓␈αthese␈αwords␈αtogether␈αfor␈αthe␈αblocks␈αin␈αa␈αpartial␈αtower␈αwe␈αget␈αa␈αword␈αwhich␈αtells␈αus␈αfor␈αeach
␈↓face␈αof␈αthe␈αtower␈αwhat␈αcolors␈αhave␈αbeen␈α
used.␈α A␈αparticular␈αface␈αcycle␈αfrom␈αthe␈αnext␈αblock␈α
can␈αbe
␈↓added␈α⊂to␈α⊂the␈α⊂tower␈α⊂if␈α⊃the␈α⊂␈↓βand␈↓␈α⊂of␈α⊂its␈α⊂word␈α⊂with␈α⊃the␈α⊂word␈α⊂representing␈α⊂the␈α⊂tower␈α⊂is␈α⊃zero.␈α⊂ We
␈↓represent␈αa␈αposition␈αby␈αa␈αlist␈αof␈αwords␈αrepresenting␈αits␈αpartial␈αtowers␈αwith␈α0␈αas␈αthe␈αlast␈αelement␈α
and
␈↓the␈αhighest␈αpartial␈αtower␈α
as␈αthe␈αfirst␈αelement.␈α
 The␈αvirtue␈αof␈αthis␈α
representation␈αis␈αthat␈αit␈αmakes␈α
the
␈↓description␈αof␈αthe␈αalgorithm␈αshort.␈α The␈αinitial␈αposition␈αis␈α(0).␈α The␈αnew␈α␈↓αpuzz␈↓␈αcan␈αbe␈αformed␈αfrom
␈↓the␈α
old␈α
one␈α
by␈α
the␈α
assignment

␈↓        ␈↓αpuzza ␈↓↓←␈↓α mapcar␈↓↓[␈↓αpuzz, λx␈↓↓:␈↓α mapcar␈↓↓[␈↓αx, zap␈↓↓]]␈↓α, ␈↓

␈↓where


␈↓      ␈↓αzap␈α
v␈α
␈↓↓←␈α
␈↓βif␈α
n␈α
␈↓αv␈α
␈↓βthen␈α
␈↓α0␈α
␈↓βelse␈α
␈↓αpoo␈α
␈↓βa␈α
␈↓αv␈α
+␈α
16zap␈α
␈↓βd␈α␈↓αv,␈α
␈↓

␈↓and


␈↓      ␈↓αpoo␈α
x␈α
␈↓↓←␈α
␈↓βif␈α
␈↓αx␈↓↓=␈↓R␈α
␈↓βthen␈α
␈↓α1␈α
␈↓βelse␈α
if␈α
␈↓αx␈↓↓=␈↓W␈α
␈↓βthen␈α
 ␈↓2␈α
␈↓βelse␈α
if␈α
␈↓αx␈↓↓=␈↓G␈α
␈↓βthen␈α
␈↓4␈α␈↓βelse␈α
␈↓8.


␈↓Now␈α
we␈α
need␈α
the␈α
new␈α
functions␈α
␈↓αlose,␈α
ter,␈α
␈↓and␈α
␈↓αsuccessors␈↓.␈α
 These␈α
are
␈↓␈↓ ¬sCHAPTER II␈↓ :26


␈↓        ␈↓αlose p ␈↓↓← ␈↓βfalse␈↓α,

␈↓α␈↓        ␈↓αter p ␈↓↓← [␈↓αlength p ␈↓↓=␈↓α 5␈↓↓]␈↓α, ␈↓

␈↓and


␈↓      ␈↓αsuccessors␈α
p␈α
␈↓↓←␈↓α␈α
mapchoose␈↓↓[␈↓βa␈α
␈↓αnth␈↓↓[␈↓αpuzza,␈α
length␈α
p␈↓↓]␈↓α,␈α
λx␈↓↓:␈↓α␈α
␈↓βa␈α
␈↓αp␈α
␈↓βand␈α
␈↓αx␈α
␈↓↓=␈↓α␈α
0,␈α
λx␈↓↓:␈↓α␈α
␈↓↓[␈↓βa␈α
␈↓αp␈α
␈↓βor␈α
␈↓αx␈↓↓]␈↓α␈α
.␈α
p␈↓↓]␈↓α.␈↓

␈↓where

␈↓        ␈↓αmapchoose␈↓↓[␈↓αu, pred, fn␈↓↓] ← ␈↓βif n ␈↓αu ␈↓βthen ␈↓NIL

␈↓              ␈↓βelse␈α
if␈α
␈↓αpred␈α
␈↓βa␈α
␈↓αu␈α
␈↓βthen␈α
␈↓αfn␈↓↓[␈↓βa␈α
␈↓αu␈↓↓]␈↓α␈α
.␈α
mapchoose␈↓↓[␈↓βd␈α
␈↓αu␈α
,␈α
pred,␈αfn␈↓↓]␈α
␈↓β
␈↓β␈↓                ␈↓βelse ␈↓αmapchoose␈↓↓[␈↓βd ␈↓αu, pred, fn␈↓↓]␈↓α.␈↓


␈↓␈↓αlose␈↓␈α
is␈α∞trivial,␈α
because␈α
the␈α∞␈↓αmapchoose␈↓␈α
is␈α∞used␈α
to␈α
make␈α∞sure␈α
that␈α
only␈α∞non-losing␈α
new␈α∞positions␈α
are
␈↓generated␈α⊂by␈α∂␈↓αsuccessors␈↓.␈α⊂ This␈α∂version␈α⊂runs␈α∂in␈α⊂a␈α⊂little␈α∂less␈α⊂than␈α∂one␈α⊂second␈α∂on␈α⊂the␈α⊂PDP-10.␈α∂ A
␈↓greater␈α∩speedup␈α∩can␈α⊃be␈α∩made␈α∩by␈α∩the␈α⊃application␈α∩of␈α∩some␈α⊃mathematics.␈α∩ In␈α∩fact,␈α∩with␈α⊃enough
␈↓mathematics,␈α
extensive␈α
tree␈α
search␈α
is␈α
unnecessary␈α
in␈α
this␈α
problem.

␈↓        ␈↓αsearch␈↓␈α∂is␈α∂used␈α∞when␈α∂we␈α∂want␈α∞to␈α∂search␈α∂a␈α∂tree␈α∞of␈α∂possibilities␈α∂for␈α∞a␈α∂solution␈α∂to␈α∂a␈α∞problem.
␈↓What␈αif␈αwe␈αwant␈αto␈αfind␈αall␈αsolutions␈αto␈αa␈αproblem?␈α This␈αcan␈αbe␈αdone␈αwith␈αa␈αfunction␈α␈↓αallsol␈↓␈αthat
␈↓uses␈α
the␈α
same␈α
␈↓αlose,␈α
ter,␈α
␈↓and␈α
␈↓αsuccessors␈↓␈α
functions␈α
as␈α
does␈α
␈↓αsearch␈↓.␈α
 The␈α
simplest␈α
way␈α
to␈α
write␈α
␈↓αallsol␈↓␈α
is


␈↓      ␈↓αallsol␈α
p␈α
␈↓↓←␈α
␈↓βif␈α
␈↓αlose␈α
p␈α
␈↓βthen␈α
␈↓NIL␈α
␈↓βelse␈α
if␈α
␈↓αter␈α
p␈α
 ␈↓βthen␈α
␈↓α(p)␈α
␈↓βelse␈α
␈↓αmapapp␈↓↓[␈↓αsuccessors␈α
p,␈αallsol␈↓↓]␈↓α,␈α
␈↓

␈↓where

␈↓      ␈↓αmapapp␈↓↓[␈↓αu,␈α
fn␈↓↓]␈α
←␈α
␈↓βif␈α
n␈α
␈↓αu␈α␈↓βthen␈α
␈↓NIL␈α
␈↓βelse␈α
␈↓αfn␈↓↓[␈↓βa␈α
␈↓αu␈↓↓]␈↓α␈α
.␈α
mappap␈↓↓[␈↓βd␈α␈↓αu,␈α
fn␈↓↓]␈↓α.␈↓


␈↓This␈αform␈α
of␈αthe␈α
function␈αis␈αsomewhat␈α
inefficient␈αbecause␈α
of␈αall␈αthe␈α
␈↓αappend␈↓ing.␈α A␈α
more␈αefficient
␈↓form␈α
uses␈α
an␈α
auxiliary␈α
function␈α
as␈α
follows:

␈↓        ␈↓αallsol p ␈↓↓←␈↓α allsola␈↓↓[␈↓αp, ␈↓NIL␈↓↓]␈↓

␈↓        ␈↓αallsola␈↓↓[␈↓αp, found␈↓↓] ← ␈↓βif ␈↓αlose p ␈↓βthen ␈↓αfound
␈↓α                                        ␈↓βelse if ␈↓αter p ␈↓βthen ␈↓αp . found
␈↓α                                        ␈↓βelse ␈↓αallsolb␈↓↓[␈↓αsuccessors p, found␈↓↓]␈↓α,


␈↓α      allsolb␈↓↓[␈↓αu,␈α
found␈↓↓]␈α
←␈α
␈↓βif␈α
n␈α
␈↓αu␈α␈↓βthen␈α
␈↓αfound␈α
␈↓βelse␈α
␈↓αallsolb␈↓↓[␈↓βd␈α
␈↓αu,␈α
allsola␈↓↓[␈↓βa␈α␈↓αu,␈α
found␈↓↓]]␈↓α.␈↓
␈↓␈↓ ¬sCHAPTER II␈↓ :27


␈↓The␈α∩recursive␈α⊃program␈α∩structure␈α⊃that␈α∩arises␈α⊃here␈α∩is␈α∩common␈α⊃when␈α∩a␈α⊃list␈α∩is␈α⊃to␈α∩be␈α∩formed␈α⊃by
␈↓recurring␈α
through␈α
a␈α
list␈α
structure.



␈↓6.  ␈↓βGame␈α
trees.␈↓


␈↓      The␈α∂positions␈α∂that␈α⊂can␈α∂be␈α∂reached␈α⊂from␈α∂an␈α∂initial␈α⊂position␈α∂in␈α∂a␈α⊂ game␈α∂ form␈α∂ a␈α⊂ tree,␈α∂and
␈↓deciding␈αwhat␈αmove␈αto␈αmake␈αoften␈αinvolves␈αsearching␈αthis␈αtree.␈α However,␈αgame␈αtrees␈αare␈αsearched
␈↓in␈αa␈αdifferent␈αway␈α than␈αthe␈αtrees␈αwe␈αhave␈αlooked␈αat,␈αbecause␈αthe␈αopposing␈αinterests␈αof␈αthe␈αplayers
␈↓makes␈α
it␈α
not␈αa␈α
search␈α
for␈α
a␈αjoint␈α
line␈α
 of␈α
 play␈α that␈α
will␈α
 lead␈α
 to␈α the␈α
 first␈α
 player␈α
winning,␈αbut
␈↓rather␈α
a␈α
search␈α
for␈α
a␈α
strategy␈α
that␈α
will␈α
lead␈α
to␈α
a␈α
win␈α
regardless␈α
of␈α
what␈α
the␈α
other␈α
 player␈α
does.

␈↓        The␈α  simplest␈α situation␈α is␈α characterized␈α by␈α a␈α function␈α␈↓αsuccessors␈↓␈αthat␈αgives␈αthe␈αpositions
␈↓that␈αcan␈αbe␈αreached␈αin␈α one␈αmove,␈α a␈α predicate␈α ␈↓αter␈↓␈α that␈α tells␈α when␈αa␈αposition␈αis␈αto␈αbe␈αregarded
␈↓as␈α_ terminal␈α↔ for␈α_ the␈α_ given␈α↔ analysis,␈α_ and␈α↔ a␈α_  function␈α_␈↓αimval␈↓␈α↔ that␈α_ gives␈α_ a␈α↔ number
␈↓approximating␈α the␈α value␈α of␈αthe␈α
position␈αto␈αone␈αof␈αthe␈α
 players.␈α  We␈α shall␈α call␈α this␈α player␈α
 the
␈↓maximizing␈α player␈α and␈α his␈αopponent␈αthe␈αminimizing␈αplayer.␈αUsually,␈αthe␈αnumerical␈αvalues␈αarise,
␈↓because␈α∂the␈α⊂search␈α∂cannot␈α⊂be␈α∂carried␈α∂ out␈α⊂to␈α∂the␈α⊂end␈α∂of␈α∂the␈α⊂game,␈α∂and␈α⊂the␈α∂analysis␈α⊂stops␈α∂with
␈↓reasonably␈αstatic␈α
positions␈αthat␈α can␈α
 be␈α evaluated␈α
 by␈α some␈α rule.␈α
  Naturally,␈α the␈αfunction␈α
 ␈↓αimval␈↓
␈↓is␈α
 chosen␈α to␈α
 be␈α
 easy␈α to␈α
 calculate␈αand␈α
to␈α
correlate␈αwell␈α
with␈α
the␈αprobability␈α
that␈αthe␈α
 maximizing
␈↓player␈α
 can␈α
win␈α
the␈α
position.

␈↓        The␈αsimplest␈αrule␈αfor␈αfinding␈αthe␈αcorrect␈αmove␈αin␈αa␈αposition␈αuses␈αauxiliary␈αfunctions␈α␈↓αvalmax␈↓
␈↓and␈α␈↓αvalmin␈↓␈α
that␈αgive␈αa␈α
value␈αto␈αa␈α
position␈αby␈α
using␈α␈↓αimval␈↓␈αif␈α
the␈αposition␈αis␈α
terminal␈αand␈αtaking␈α
the
␈↓max␈α
or␈α
min␈α
of␈α
the␈α
successor␈α
positions␈α
otherwise.

␈↓        For␈αthis␈αwe␈αwant␈αfunctions␈αfor␈αgetting␈αthe␈αmaximum␈αor␈αthe␈αminimum␈αof␈αa␈αfunction␈αon␈αa␈α
list,
␈↓and␈α
they␈α
are␈α
defined␈α
as␈α
follows:


␈↓      ␈↓αmaxlis␈↓↓[␈↓αu,␈α
f␈↓↓]␈α
←␈α
␈↓βif␈α
n␈α
␈↓αu␈α
␈↓βthen␈α␈↓α-␈↓↓∞␈↓α␈α
␈↓βelse␈α
␈↓α␈α
max␈↓↓[␈↓αf␈↓↓[␈↓βa␈α
␈↓αu␈↓↓]␈↓α,␈α
maxlis␈↓↓[␈↓βd␈α
␈↓αu,␈αf␈↓↓]]␈↓α,␈α
␈↓

␈↓and


␈↓      ␈↓αminlis␈↓↓[␈↓αu,␈α
f␈↓↓]␈α
←␈α
␈↓βif␈α
n␈α
␈↓αu␈α␈↓βthen␈α
␈↓α␈↓↓∞␈↓α␈α
␈↓βelse␈α
␈↓α␈α
min␈↓↓[␈↓αf␈↓↓[␈↓βa␈α
␈↓αu␈↓↓]␈↓α,␈α
minlis␈↓↓[␈↓βd␈α␈↓αu,␈α
f␈↓↓]]␈↓α.␈↓


␈↓In␈αthese␈α
functions,␈α-␈↓↓∞␈↓␈αand␈α
␈↓↓∞␈↓␈αrepresent␈αnumbers␈α
that␈αare␈α
smaller␈αand␈αlarger␈α
than␈αany␈αactual␈α
values
␈↓that␈αwill␈α
occur␈αin␈α
evaluating␈α␈↓αf␈↓.␈α
 If␈αthese␈α
numbers␈αare␈α
not␈αavailable,␈α
then␈αit␈α
is␈αnecessary␈α
to␈αprime␈α
the
␈↓function␈α∩with␈α∩the␈α∩values␈α∩of␈α∩␈↓αf␈↓␈α∩applied␈α∩to␈α∪the␈α∩first␈α∩element␈α∩of␈α∩the␈α∩list,␈α∩and␈α∩the␈α∪functions␈α∩are
␈↓meaningless␈αfor␈αnull␈αlists.␈α Iterative␈αversions␈αof␈αthe␈αfunctions␈αare␈αgenerally␈αbetter;␈αwe␈αgive␈αonly␈αthe
␈↓iterative␈α
version␈α
of␈α
␈↓αmaxlis␈↓,␈α
namely

␈↓        ␈↓αmaxlis␈↓↓[␈↓αu, f␈↓↓] ←␈↓α maxlisa␈↓↓[␈↓αu, -␈↓↓∞␈↓α, f␈↓↓]␈↓α, ␈↓
␈↓␈↓ ¬sCHAPTER II␈↓ :28


␈↓where


␈↓      ␈↓αmaxlisa␈↓↓[␈↓αu,␈α
x,␈α
f␈↓↓]␈α
←␈α
␈↓αif␈α
n␈α
u␈α␈↓βthen␈α
␈↓αx␈α
␈↓βelse␈α
␈↓αmaxlisa␈↓↓[␈↓βd␈α
␈↓αu,␈α
max␈↓↓[␈↓αx,␈α
f␈↓↓[␈↓βa␈α␈↓αu␈↓↓]]␈↓α,␈α
f␈↓↓]␈↓α.␈↓

␈↓We now have


␈↓      ␈↓αvalmax␈α
p␈α
␈↓↓←␈α
␈↓βif␈α
␈↓αter␈α
p␈α
␈↓βthen␈α
␈↓αimval␈α
p␈α
␈↓βelse␈α
␈↓αmaxlis␈↓↓[␈↓αsuccessors␈αp,␈α
valmin␈↓↓]␈↓,

␈↓and


␈↓      ␈↓αvalmin␈α
p␈α
␈↓↓←␈α
␈↓βif␈α
␈↓αter␈α
p␈α
␈↓βthen␈α
␈↓αimval␈α
p␈α
␈↓βelse␈α
␈↓αminlis␈↓↓[␈↓αsuccessors␈αp,␈α
valmax␈↓↓]␈↓.

␈↓The best move is now chosen by

␈↓        ␈↓αmovemax p ␈↓↓←␈↓α bestmax␈↓↓[␈↓αsuccesors p, valmin␈↓↓]␈↓α, ␈↓

␈↓or

␈↓        ␈↓αmovemin p ␈↓↓←␈↓α bestmin␈↓↓[␈↓αsuccesors p, valmax␈↓↓]␈↓α, ␈↓

␈↓where

␈↓        ␈↓αbestmax␈↓↓[␈↓αu, f␈↓↓] ←␈↓α bestmaxa␈↓↓[␈↓βd ␈↓αu, ␈↓βa ␈↓αu, f␈↓↓[␈↓βa ␈↓αu␈↓↓]␈↓α, f␈↓↓]␈↓α,

␈↓α␈↓        ␈↓αbestmaxa␈↓↓[␈↓αu, sofar, valsofar, f␈↓↓] ← ␈↓βif n ␈↓αu ␈↓βthen ␈↓αsofar

␈↓α              ␈↓βelse␈α
if␈α
␈↓αf␈↓↓[␈↓βa␈α
␈↓αu␈↓↓]␈α
≤␈α␈↓αbestsofar␈α
␈↓βthen␈α
␈↓αbestmaxa␈↓↓[␈↓βd␈α
␈↓αu,␈α
sofar,␈αbestsofar,␈α
f␈↓↓]␈↓α
␈↓α␈↓                ␈↓α␈↓βelse ␈↓αbestmaxa␈↓↓[␈↓βd ␈↓αu, ␈↓βa ␈↓αu, f␈↓↓[␈↓βa ␈↓αu␈↓↓]␈↓α, f␈↓↓]␈↓α,

␈↓α␈↓        ␈↓αbestmin␈↓↓[␈↓αu, f␈↓↓] ←␈↓α bestmina␈↓↓[␈↓βd ␈↓αu, ␈↓βa ␈↓αu, f␈↓↓[␈↓βa ␈↓αu␈↓↓]␈↓α, f␈↓↓]␈↓α, ␈↓

␈↓and

␈↓        ␈↓αbestmina␈↓↓[␈↓αu, sofar, valsofar, f␈↓↓] ← ␈↓βif n ␈↓αu ␈↓βthen ␈↓αsofar

␈↓α              ␈↓βelse␈α
if␈α
␈↓αf␈↓↓[␈↓βa␈α
␈↓αu␈↓↓]␈α
≥␈α␈↓αbestsofar␈α
␈↓βthen␈α
␈↓αbestmina␈↓↓[␈↓βd␈α
␈↓αu,␈α
sofar,␈αbestsofar,␈α
f␈↓↓]␈↓α
␈↓α␈↓                ␈↓α␈↓βelse ␈↓αbestmina␈↓↓[␈↓βd ␈↓αu, ␈↓βa ␈↓αu, f␈↓↓[␈↓βa ␈↓αu␈↓↓]␈↓α, f␈↓↓]␈↓α.␈↓


␈↓      However,␈α
this␈α
straight␈αminimax␈α
computation␈α
of␈αthe␈α
best␈α
move␈αdoes␈α
much␈α
more␈αcomputation␈α
in
␈↓general␈α
than␈α
is␈α
usually␈α
necessary.␈α
 The␈α
simplest␈α
way␈α
to␈α
see␈α
this␈α
is␈α
from␈α
the␈α
move␈α
tree␈α
of␈α
Figure␈α
2.6.
␈↓␈↓ ¬sCHAPTER II␈↓ :29













␈↓␈↓ ε∂Figure 2.6

␈↓We␈α
see␈αfrom␈α
this␈α
figure␈αthat␈α
it␈α
is␈αunnecessary␈α
to␈α
examine␈αthe␈α
moves␈α
marked␈αx,␈α
because␈αtheir␈α
values
␈↓have␈α∂no␈α∞effect␈α∂on␈α∂the␈α∞value␈α∂of␈α∂the␈α∞game␈α∂or␈α∂on␈α∞the␈α∂correct␈α∂move␈α∞since␈α∂the␈α∂presence␈α∞of␈α∂the␈α∂9␈α∞is
␈↓sufficient␈αinformation␈α
at␈αthis␈α
point␈αto␈α
show␈αthat␈αthe␈α
move␈αleading␈α
to␈αthe␈α
vertex␈αpreceding␈αit␈α
should
␈↓not␈α
be␈α
chosen␈α
by␈α
the␈α
minimizing␈α
player.

␈↓        The␈αgeneral␈αsituation␈αis␈αthat␈αit␈αis␈αunnecessary␈αto␈αexamine␈αfurther␈αmoves␈αin␈αa␈αposition␈αonce␈αa
␈↓move␈α
is␈α∞found␈α
that␈α∞refutes␈α
moving␈α∞to␈α
the␈α∞position␈α
in␈α
the␈α∞first␈α
place.␈α∞ This␈α
idea␈α∞is␈α
called␈α∞the␈α
αβ-
␈↓heuristic␈α
and␈α
expressed␈α
in␈α
the␈α
following␈α
recursive␈α
definitions:

␈↓        ␈↓αmaxval p ␈↓↓←␈↓α maxval1␈↓↓[␈↓αp, -␈↓↓∞␈↓α, ␈↓↓∞␈↓α␈↓↓]␈↓α,


␈↓α        maxval1␈↓↓[␈↓αp,␈α
α,␈α
β␈↓↓]␈α
←␈α
␈↓βif␈α
␈↓αter␈α
p␈α␈↓βthen␈α
␈↓αmax␈↓↓[␈↓αα,␈α
min␈↓↓[␈↓αβ,␈α
imval␈α
p␈↓↓]]␈↓α␈α
 ␈↓βelse␈α
␈↓αmaxval2␈↓↓[␈↓αsuccessors␈α
p,␈αα,␈α
β␈↓↓]␈↓α,


␈↓α        maxval2␈↓↓[␈↓αu,␈α
α,␈α
β␈↓↓]␈α
←␈α
{␈↓αminval1␈↓↓[␈↓βa␈α
␈↓αu,␈α
α,␈α
β␈↓↓]}[␈↓αλw␈↓↓:␈↓α␈α␈↓βif␈α
␈↓αw␈α
␈↓↓=␈↓α␈α
β␈α
␈↓βthen␈α
 ␈↓αβ␈α
␈↓βelse␈α
␈↓αmaxval2␈↓↓[␈↓βd␈α
␈↓αu,␈αw,␈α
β␈↓↓]]␈↓α,

␈↓α␈↓        ␈↓αminval p ␈↓↓←␈↓α minval1␈↓↓[␈↓αp, -␈↓↓∞␈↓α, ␈↓↓∞␈↓α␈↓↓]␈↓α,


␈↓α        minval1␈↓↓[␈↓αp,␈α
α,␈α
β␈↓↓]␈α
←␈α
␈↓βif␈α
␈↓αter␈α
p␈α␈↓βthen␈α
␈↓αmax␈↓↓[␈↓αα,␈α
min␈↓↓[␈↓αβ,␈α
imval␈α
p␈↓↓]]␈↓α␈α
 ␈↓βelse␈α
␈↓αminval2␈↓↓[␈↓αsuccessors␈α
p,␈αα,␈α
β␈↓↓]␈↓α,


␈↓α        minval2␈↓↓[␈↓αu,␈α
α,␈α
β␈↓↓]␈α
←␈α
{␈↓αmaxval1␈↓↓[␈↓βa␈α
␈↓αu,␈α
α,␈α
β␈↓↓]}[␈↓αλw␈↓↓:␈↓α␈α␈↓βif␈α
␈↓αw␈α
␈↓↓=␈↓α␈α
α␈α
␈↓βthen␈α
 ␈↓αα␈α
␈↓βelse␈α
␈↓αminval2␈↓↓[␈↓βd␈α
␈↓αu,␈αα,␈α
w␈↓↓]␈↓α.␈↓


␈↓      The␈α∞reduction␈α∞in␈α∞number␈α
of␈α∞positions␈α∞examined␈α∞given␈α∞by␈α
the␈α∞αβ␈α∞algorithm␈α∞over␈α∞the␈α
simple
␈↓minimax␈αalgorithm␈αdepends␈αon␈α
the␈αorder␈αin␈αwhich␈α
the␈αmoves␈αare␈αexamined.␈α
 In␈αthe␈αworst␈αcase,␈α
the
␈↓moves␈αhappen␈αto␈αbe␈αexamined␈αin␈αinverse␈αorder␈αof␈α
merit␈αin␈αevery␈αposition␈αon␈αthe␈αtree,␈αi.e.␈αthe␈α
worst
␈↓move␈α
first.␈α
 In␈α
that␈αcase,␈α
there␈α
is␈α
no␈αimprovement␈α
over␈α
minimax.␈α
 The␈α
best␈αcase␈α
is␈α
the␈α
one␈αin␈α
which
␈↓the␈α
best␈α
move␈α
in␈α
every␈α
position␈αis␈α
examined␈α
first.␈α
 If␈α
we␈α
look␈α
␈↓αn␈↓␈αmoves␈α
deep␈α
on␈α
a␈α
tree␈α
that␈α
has␈α␈↓αk␈↓
␈↓successors␈α
to␈α
each␈α
position,␈α
then␈α∞minimax␈α
looks␈α
at␈α
␈↓αk␈↓εn␈↓␈α
positions␈α∞while␈α
αβ␈α
looks␈α
at␈α
about␈α∞only␈α
␈↓αk␈↓εn/2␈↓.
␈↓Thus␈α
a␈α
program␈α
that␈α
looks␈α
at␈α
10␈↓ε4␈↓␈α
moves␈α
with␈α
αβ␈α
might␈α
have␈α
to␈α
look␈α
at␈α
10␈↓ε8␈↓␈α
with␈α
minimax.␈α
 For
␈↓this␈α
reason,␈α
game␈α
playing␈αprograms␈α
using␈α
αβ␈α
make␈αa␈α
big␈α
effort␈α
to␈αinclude␈α
as␈α
good␈α
as␈α
possible␈αan
␈↓␈↓ ¬sCHAPTER II␈↓ :30


␈↓ordering␈α
of␈αmoves␈α
into␈α
the␈α␈↓αsuccessors␈↓␈α
function.␈α
 When␈αthere␈α
is␈α
a␈αdeep␈α
tree␈α
search␈αto␈α
be␈α
done,␈αthe
␈↓way␈α
to␈α
make␈α
the␈α
ordering␈α
is␈α
with␈α
a␈α
short␈α
look-ahead␈α
to␈α
a␈α
much␈α
smaller␈α
depth␈α
than␈α
the␈α
main␈α
search.
␈↓Still␈α
shorter␈α
look-aheads␈αare␈α
used␈α
deeper␈α
in␈αthe␈α
tree,␈α
and␈αbeyond␈α
a␈α
certain␈α
depth,␈αnon-look-ahead
␈↓ordering␈α
methods␈α
are␈α
of␈α
decreasing␈α
complexity.

␈↓        A␈α∂version␈α∂of␈α∞αβ␈α∂incorporating␈α∂optimistic␈α∞and␈α∂pessimistic␈α∂evaluations␈α∞of␈α∂positions␈α∂was␈α∞first
␈↓proposed␈α⊂by␈α⊂McCarthy␈α⊂about␈α⊂1958.␈α⊂ Edwards␈α⊂and␈α⊂Hart␈α⊂at␈α⊂M.I.T.␈α⊂about␈α⊂1959␈α⊂proved␈α⊃that␈α⊂the
␈↓present␈α∂version␈α⊂of␈α∂αβ␈α∂works␈α⊂and␈α∂calculated␈α∂the␈α⊂improvement␈α∂it␈α∂gives␈α⊂over␈α∂minimax.␈α⊂ The␈α∂first
␈↓publication,␈α
however,␈α
was␈α
Brudno␈α
(1963).␈α
 It␈α
is␈α
worth␈α
noting␈α
that␈α
αβ␈α
was␈α
not␈α
used␈α
in␈α
the␈α
early␈α
chess
␈↓playing␈α⊃programs␈α⊃in␈α⊂spite␈α⊃of␈α⊃the␈α⊂fact␈α⊃that␈α⊃it␈α⊃is␈α⊂clearly␈α⊃used␈α⊃in␈α⊂any␈α⊃human␈α⊃play.␈α⊃ Its␈α⊂non-use,
␈↓therefore,␈α∪represents␈α∪a␈α∀failure␈α∪of␈α∪self-observation.␈α∀ Very␈α∪likely,␈α∪there␈α∀are␈α∪a␈α∪number␈α∀of␈α∪other
␈↓algorithms␈αused␈αin␈αhuman␈αthought␈αthat␈αwe␈α
have␈αnot␈αnoticed␈αan␈αincorporated␈αin␈αour␈αprograms.␈α
 To
␈↓the␈αextent␈α
that␈αthis␈α
is␈αso,␈α
artificial␈αintelligence␈α
will␈αbe␈α
␈↓αa␈αposteriori␈↓␈α
obvious␈αeven␈α
though␈αit␈α
is␈α␈↓αa␈α
priori␈↓
␈↓very␈α
difficult.